請看下面三種定義:
const char *p;
char const *p;
char * const p;
首先看第一種,我們先看p,本着”從里往外”的原則,p是一個char *類型的變量,但char *前面有一個const修飾,即p所指向的內容為const類型不可修改,我們可以寫如下程序進行實驗,當試圖對p指向的數組的第一個元素進行修改時,編譯即可發現報錯:
第二種:char const *p; const位於char *之間,由於char *是p的類型,此種寫法和const char *等價,大家可以自行實驗,如下圖:
最后一種,char * const p; 這里const在p之前,修飾的是p,即p是不可修改的,所以,我們可以實驗:
可以看到沒有錯誤,p所指向的內容可以修改,而如果試圖修改p的值,如下:
可以發現依舊是報這個錯誤,大家可以親自上機實驗,來加深理解。
所以答案:
const char *p; // 聲明一個指向字符或字符串常量的指針(p所指向的內容不可修改)
char const *p;// 同上
char * const p;//聲明一個指向字符或字符串的指針常量,即不可以修改p的值。
const char *p1; //p1可以被改變,*p1不可以被改變,既p1可以轉向
char onst *p2; //p2可以改變,*p2不可以被改變,既p2可以轉向
char * const p3; //p3不可以被改變,*p3可以被改變
const char const *p4; //p4與*p4都不可以被改變