我也大致瞭解如何指針用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