初學const int* 和 const char*
創新互聯建站是一家集網站建設,武邑企業網站建設,武邑品牌網站建設,網站定制,武邑網站建設報價,網絡營銷,網絡優化,武邑網站推廣為一體的創新建站企業,幫助傳統企業提升企業形象加強企業競爭力。可充分滿足這一群體相比中小企業更為豐富、高端、多元的互聯網需求。同時我們時刻保持專業、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們為更多的企業打造出實用型網站。const int* 和 const char* 看起來雖然只有int 和 char 的差異,但實際上差別還有些大。
1,先從const int * 說起,const int* 和int const *是一樣的,這個const 修飾詞修飾的是變量,也就是這個指針對應的內存的值不可修改,指針的指向可以修改。
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'; 這個表達式時錯誤的,但是p_chr = "world";時可執行的,看起來p_chr 指向的字符串被修改了!
為什么會出現上面這個現象?我理解有兩個差異。
1,編譯器對于指向 int 類型的指針和指向 char 類型的指針處理不同。如果在代碼中使用p_int , 它是一個地址;但如果在代碼中使用p_chr, 它時一個字符串(雖然本質上它也是一個地址,但是編譯器對于指向char的指針,會自動調出字符串。而*p_chr 僅代表字符串的首字母)
2,字符串(“world”)和整數(10)的不同。字符串world是左值,而常數10是右值。“world”本身會在內存中分配一塊地址存放這個字符串,并返回的的首地址。
綜合上面兩點,p_chr = "world";這個表達式就可以理解了。相當于重新開辟了一個內存位置存放了world,然后把這個內存地址返回給p_chr,? 這樣和const char* p_chr 并不矛盾,因為沒有取試圖修改p_chr 指向的內存位置,而是修改了指針的指向。類似于上面的 p_int = &b; 重新定向了指針指向。
初次看到這個還是有些混亂的,現在清楚多了。
關于左值和右值,(72條消息) 初識 C++ 函數參數引用和指針及左值和右值_weixin_52352638的博客-博客
你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧
網站欄目:初學constint*和constchar*-創新互聯
網站URL:http://m.newbst.com/article8/cepgip.html
成都網站建設公司_創新互聯,為您提供搜索引擎優化、品牌網站制作、云服務器、網站制作、響應式網站、網站內鏈
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯