我的一位同事在ANSI C中與const有點相似,我想知道你們對它的想法。他寫這樣的東西,例如:
在一個變量聲明中有多個常量
const uint8* const pt_data
我明白,他與這是怎麼回事,但對我來說它使閱讀和可維護性很難與所有這些常量無處不在。
我的一位同事在ANSI C中與const有點相似,我想知道你們對它的想法。他寫這樣的東西,例如:
在一個變量聲明中有多個常量
const uint8* const pt_data
我明白,他與這是怎麼回事,但對我來說它使閱讀和可維護性很難與所有這些常量無處不在。
這是一個const
指向const
數據的指針。
const
防止*pt_data = 10;
const
防止pt_data = stuff;
看起來它可以是相當合理的。
它是一個常量指針,指向一個常量數據。
這意味着你不能改變數據(其地址爲pt_data
存儲),也不能改變指針(pt_data
)指向其他地址(其他地址)。
他可能需要這種方式。
const
總是指其右邊的字,除非它是在該行,它指的是項目本身的結束(在高級語言)
const char* str; //This is a pointer to read-only char data
//Read as to (const char)* str;
//Thus :
// *str = 'a';
//Is forbidden
char* const str; //This is a read-only pointer to a char data
//Read as char* (const str);
//Thus :
// str = &a;
//Is forbidden
const char* const str; //This is a read-only pointer to read-only char data
//Read as (const char)* (const str);
//Thus :
// str = &a
// and
// *str = 'a';
//Is forbidden
你應該總是初始化這些指示它們時的指針(除非它們是參數)
const
關鍵字非常適合確保某些內容不會被修改,並且還會告訴它不應該被修改的開發者。例如int strlen(const char* str)
告訴你在你的字符串中的數據不會被修改。
如果從變量名開始,逆時針轉動,pt_data
是const
指向uint8
的指針,它是const
。
請參見下面的原油ASCII圖片:
,--------------------------------. | | | ,------------------------. | | | | | | | ,------------------. | | | | | | | | | | | ,-----------. | | | | | | | | | | | const uint8 * const pt_data; | | | | | | | | | | | | | | | `-----' | | | | | | | | | | | `-------------' | | | | | | | `--------------------' | | | `--------------------------'
自從我在一箇舊的C的書很多年前看到這個方案,它幫助我理解複雜的聲明。
這是大衛·安德森[順時針或螺旋規則(http://c-faq.com/decl/spiral.anderson.html)。 – 2012-02-02 11:05:38
@Als看來我的方向錯了,但至少現在我有地方點描述它時。謝謝! :) – 2012-02-02 11:17:06
對此有疑問?本網站不是爲了表達您的意見,而是爲了獲得客觀的問題答案。 – interjay 2012-02-02 09:04:46
感謝您的輸入...在 – Leo 2012-02-02 09:10:41
下回答的問題您的同事是否在頭文件和實現中都這樣做? – 2012-02-02 09:28:55