雖然問題已經被解決了答案上面,我很想念......的原因
因此,也許作爲一個經驗法則:
- 的
const
總是指它的前身令牌。
- 如果沒有這樣的情況,它就是「強制」它的後繼標記。
這個規則可以真正幫助你聲明一個指向const指針的指針或者其他東西。
無論如何,考慮到這一點,就應該得到清楚爲什麼
struct Person *const person = NULL;
聲明瞭一個常量指針的可變結構。
想想看,你的typedef 「groups」struct Person
與指針標記*
。 所以,寫
const PersonRef person = NULL;
你的編譯器看到的是這樣的(僞代碼):
const [struct Person *]person = NULL;
由於沒有什麼const
的離開,它deklares令牌它是正確的struct Person *
不變。
嗯,我想,這就是爲什麼我不喜歡通過typedefs隱藏指針,而我喜歡typedefs這樣的。那寫什麼
typedef struct Person { ... } Person;
const Person *person; /*< const person */
Person *const pointer; /*< const pointer to mutable person */
它應該是很清楚的編譯器和人類,你在做什麼。
「但const關鍵字不應該使指針爲常量。」咦?簡短的回答:不要使用typedefs,他們只是在那裏混淆你。記住他們,直到你需要他們。 – wildplasser 2011-12-14 12:29:44
@wildplasser:「不要使用typedefs」不是很好的建議。也許「不要隱藏在typedef後面的指針」更合適...... – 2011-12-14 12:32:08
我不同意。它*是一個很好的建議。隱藏typedef後面的結構與隱藏指針一樣令人困惑。它只會污染你的精神命名空間。即使沒有語法突出顯示,我更容易和更快地讀「struct person * p」,然後「pPerson p」。 – wildplasser 2011-12-14 12:36:53