初學(xué)const int* 和 const char*
const int* 和 const char* 看起來(lái)雖然只有int 和 char 的差異,但實(shí)際上差別還有些大。
1,先從const int * 說(shuō)起,const int* 和int const *是一樣的,這個(gè)const 修飾詞修飾的是變量,也就是這個(gè)指針對(duì)應(yīng)的內(nèi)存的值不可修改,指針的指向可以修改。
int a = 10;
int b = 100;
const int *p_int = &a;
p_int = &b;
//*p = 5;// 提示 *p不是可修改的左值
2,按照這個(gè)思路看一下 const char*
char chr[] = "hello";
const char *p_chr = chr;// chr 不需要用&取地址,因?yàn)閏hr本身就是chr[]的首地址
//*p_chr = 'a'; // 同const int* 一樣,提升*p_chr 不是可修改的左值
p_chr = "world";//!
雖然*p_chr = 'a'; 這個(gè)表達(dá)式時(shí)錯(cuò)誤的,但是p_chr = "world";時(shí)可執(zhí)行的,看起來(lái)p_chr 指向的字符串被修改了!
為什么會(huì)出現(xiàn)上面這個(gè)現(xiàn)象?我理解有兩個(gè)差異。
1,編譯器對(duì)于指向 int 類型的指針和指向 char 類型的指針處理不同。如果在代碼中使用p_int , 它是一個(gè)地址;但如果在代碼中使用p_chr, 它時(shí)一個(gè)字符串(雖然本質(zhì)上它也是一個(gè)地址,但是編譯器對(duì)于指向char的指針,會(huì)自動(dòng)調(diào)出字符串。而*p_chr 僅代表字符串的首字母)
2,字符串(“world”)和整數(shù)(10)的不同。字符串world是左值,而常數(shù)10是右值?!皐orld”本身會(huì)在內(nèi)存中分配一塊地址存放這個(gè)字符串,并返回的的首地址。
綜合上面兩點(diǎn),p_chr = "world";這個(gè)表達(dá)式就可以理解了。相當(dāng)于重新開(kāi)辟了一個(gè)內(nèi)存位置存放了world,然后把這個(gè)內(nèi)存地址返回給p_chr,? 這樣和const char* p_chr 并不矛盾,因?yàn)闆](méi)有取試圖修改p_chr 指向的內(nèi)存位置,而是修改了指針的指向。類似于上面的 p_int = &b; 重新定向了指針指向。
初次看到這個(gè)還是有些混亂的,現(xiàn)在清楚多了。
關(guān)于左值和右值,(72條消息) 初識(shí) C++ 函數(shù)參數(shù)引用和指針及左值和右值_weixin_52352638的博客-博客
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
網(wǎng)站欄目:初學(xué)constint*和constchar*-創(chuàng)新互聯(lián)
網(wǎng)站URL:http://www.rwnh.cn/article8/cepgip.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、品牌網(wǎng)站制作、云服務(wù)器、網(wǎng)站制作、響應(yīng)式網(wǎng)站、網(wǎng)站內(nèi)鏈
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容