const char*, char const*, char*const的區別問題幾乎是C++面試中每次都會有的題目。 這個知識易混點之前是看過了,今天做Linux上寫GTK程序時又出現個Warning,發散一下又想到這個問題,於是翻起來重嚼一下。
事實上這個概念誰都有隻是三種聲明方式非常相似:
Bjarne在他的The C++ Programming Language裏面給出過一個助記的方法:
把一個聲明從右向左讀。
char * const cp; ( * 讀成 pointer to ) cp is a const pointer to char
const char * p; p is a pointer to const char;
char const * p; 同上因爲C++裏面沒有const*的運算符,所以const只能屬於前面的類型。
C++標準規定,const關鍵字放在類型或變量名之前等價的。
const int n=5; //same as below
int const m=10
結論:
char * const cp : 定義一個指向字符的指針常數,即const指針
const char* p : 定義一個指向字符常數的指針
char const* p : 等同於const char* p
const char **是一個指向指針的指針,那個指針又指向一個字符串常量。
char **也是一個指向指針的指針,那個指針又指向一個字符串變量。