我也大致了解如何指针用C的工作,但此行是非常神秘的对我说:带星号的函数参数声明?
bool lib_aci_open_adv_pipes(const uint8_t * const adv_service_data_pipes) {
..
}
是什么意思?为什么*
var type和const
之间?为什么两个const
?
此代码来自Arduino库。
我也大致了解如何指针用C的工作,但此行是非常神秘的对我说:带星号的函数参数声明?
bool lib_aci_open_adv_pipes(const uint8_t * const adv_service_data_pipes) {
..
}
是什么意思?为什么*
var type和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
但你可以更改指针,考试PLE,通过递增:
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++
。
如果指针和它指向的内容必须是常量,则合并这两个声明。这是你的声明所做的。
这是一个const
指向const
值的指针。
const uint8_t *
部分意味着指针引用的值不能被修改,而const adv_service_data_pipes
意味着您不能修改函数内的指针。
所以,第一个部分禁止类似的语句:
*adv_service_data_pipes = 0;
而第二句:
adv_service_data_pipes += 1;
错误。
限定符总是适用于左侧的类型,除非它位于基类型的左侧,在这种情况下,它适用于基类型。还有问题吗? – Deduplicator 2014-12-06 13:06:50
是的。我不明白你的答案。 – 2014-12-06 13:09:01