C++中疑問點
1.const char *a與char const *a與char *const a的區別
問題:
說出以下四個語句的區別:
const char *a
char *const a
char const *a
const char *const a
const和指針的基礎知識:
指向常量的指針(C++Primer上叫 指向常量的指針)(底層const):自覺不去(靠它自己也不能)改變所指對象,而該對象若不是常量對象則其值通過其他方式改變所指對象。總之,const可綁定非const。
常量指針(C++Primer上叫 常量指針)(頂層const):由於指針爲常量,所以聲明時必須初始化,且初始化後存放在指針中那個地址不可改變。但此地址對應的數可被改變:指針常量若所指對象是常量,指針常量不能修改其所指對象的值;指針常量若所指對象是非常量,指針常量也能通過指針修改其所指對象的值。
解答:
const char *a
聲明(*a),(*a)是const char類型的。a被一個解引用運算符修飾,故a是個普通的指針,可以修改,但是a所指向的數據(即 *a)由於const的修飾而不可通過指針a去修改。(數據內容不可改,指針可改)char *const a
聲明(*const a),(*const a)是char類型的。a被一個解引用運算符和一個const關鍵詞修飾,故a是個不可修改的指針,但可通過指針a去修改a所指向的數據(即 *a)。(指針不可改,數據內容可改)char const *a
和const char *a
是同一個意思。- 如果既不允許a被修改,也不允許a所指向的數據被修改,那麼需要聲明爲
const char * const a
。