請(qǐng)看下面三種定義:
const char *p;
char const *p;
char * const p;
請(qǐng)問,三者有什么區(qū)別呢?
筆者在之前好多家筆試題種都看到這樣的問題,今天想起又拿出重新梳理一下,便于后人學(xué)習(xí)。
首先看第一種,我們先看p,本著”從里往外”的原則,p是一個(gè)char *類型的變量,但char *前面有一個(gè)const修飾,即p所指向的內(nèi)容為const類型不可修改,我們可以寫如下程序進(jìn)行實(shí)驗(yàn),當(dāng)試圖對(duì)p指向的數(shù)組的第一個(gè)元素進(jìn)行修改時(shí),編譯即可發(fā)現(xiàn)報(bào)錯(cuò):
第二種:char const *p; ?const位于char *之間,由于char *是p的類型,此種寫法和const char *等價(jià),大家可以自行實(shí)驗(yàn),如下圖:
最后一種,char * const p; 這里const在p之前,修飾的是p,即p是不可修改的,所以,我們可以實(shí)驗(yàn):
可以看到?jīng)]有錯(cuò)誤,p所指向的內(nèi)容可以修改,而如果試圖修改p的值,如下:
可以發(fā)現(xiàn)依舊是報(bào)這個(gè)錯(cuò)誤,大家可以親自上機(jī)實(shí)驗(yàn),來加深理解。
所以答案:
const char *p; // 聲明一個(gè)指向字符或字符串常量的指針(p所指向的內(nèi)容不可修改)
char const *p;// 同上
char * const p;//聲明一個(gè)指向字符或字符串的指針常量,即不可以修改p的值。
C語(yǔ)言研究中心(www.sztianhecheng.cn)