我一般都明白C中的指针是如何工作的,但这一行对我来说非常神秘:
bool lib_aci_open_adv_pipes(const uint8_t * const adv_service_data_pipes) {
..
}
这是什么意思?为什么var类型和*
之间有const
?为什么有两个const
?
此代码来自Arduino库。
答案 0 :(得分:2)
在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++
。
如果指针及其指向的内容必须是常量,请合并两个声明。这就是你的声明所做的。
答案 1 :(得分:1)
这是指向const
值的const
指针。
const uint8_t *
部分表示无法修改指针引用的值,而const adv_service_data_pipes
表示您无法修改函数内的指针。
所以,第一部分禁止语句如下:
*adv_service_data_pipes = 0;
而第二个是:
adv_service_data_pipes += 1;
错误。