带星号的函数参数声明?

时间:2014-12-06 13:04:52

标签: c

我一般都明白C中的指针是如何工作的,但这一行对我来说非常神秘:

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

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

此代码来自Arduino库。

2 个答案:

答案 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;

错误。