2014-12-06 113 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; 

錯誤。