2014-12-06 135 views
2

我也大致了解如何指针用C的工作,但此行是非常神秘的对我说:带星号的函数参数声明?

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

是什么意思?为什么* var type和const之间?为什么两个const

此代码来自Arduino库。

+0

限定符总是适用于左侧的类型,除非它位于基类型的左侧,在这种情况下,它适用于基类型。还有问题吗? – Deduplicator 2014-12-06 13:06:50

+4

是的。我不明白你的答案。 – 2014-12-06 13:09:01

回答

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 

但你可以更改指针,考试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++

如果指针和它指向的内容必须是常量,则合并这两个声明。这是你的声明所做的。

1

这是一个const指向const值的指针。

const uint8_t *部分意味着指针引用的值不能被修改,而const adv_service_data_pipes意味着您不能修改函数内的指针。

所以,第一个部分禁止类似的语句:

*adv_service_data_pipes = 0; 

而第二句:

adv_service_data_pipes += 1; 

错误。