我确实了解 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/