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