C++中 疑問點

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 *aconst char *a是同一個意思。
  • 如果既不允許a被修改,也不允許a所指向的數據被修改,那麼需要聲明爲const char * const a

轉載自:https://blog.csdn.net/BillCYJ/article/details/78879847

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章