c - 带星号的函数参数声明?

标签 c

我确实了解 C 中指针的工作原理,但这一行对我来说非常神秘:

bool lib_aci_open_adv_pipes(const uint8_t * const adv_service_data_pipes) {
..
}

这是什么意思?为什么 * 位于 var 类型和 const 之间?为什么有两个 const?

此代码来自 Arduino 库。

最佳答案

C 中星号相对于 const 的位置很重要:

如果你想写出所指向的内容是const,请将const放在声明前面,如下所示:

bool lib_aci_open_adv_pipes(const uint8_t * adv_service_data_pipes)

有了这样的声明,下面的赋值是非法的

*adv_service_data_pipes = 0; // Will not compile

但您可以更改指针,例如通过递增它:

adv_service_data_pipes++; // This is fine

如果你想写指针本身是const,请将const放在星号后面,如下所示:

bool lib_aci_open_adv_pipes(uint8_t * const adv_service_data_pipes)

现在,编译器允许您分配 *adv_service_data_pipes = 0,但不允许 adv_service_data_pipes++

如果指针及其指向的内容都必须是常量,则合并两个声明。这就是您的声明的作用。

关于c - 带星号的函数参数声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27331985/

相关文章:

ios - 如果在横向模式下 iOS 无法正常工作,则设置框架

C- 交换结构数组内的字符串或数字的决策函数

c - 函数返回值没有返回语句

c - while循环不会退出C

c - 将零输入输出作为共享内存变量的值

c - 双重类型转换与双重功能

c - 请为具有内存约束的两类问题建议一个分类器

python - 位操作给出错误的输出

c - tasm 中自动插入代码

c++ - gmtime 返回不正确的时间