新聞中心
本篇內(nèi)容介紹了“C++字符數(shù)組與字符指針在運(yùn)算時(shí)的區(qū)別是什么”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括云州網(wǎng)站建設(shè)、云州網(wǎng)站制作、云州網(wǎng)頁(yè)制作以及云州網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,云州網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到云州省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
char *strPtr = "HELLO ";
char str[] = "HELLO ";
*(strPtr + 1) = 'B'; // 出錯(cuò)
*(str + 1) = 'B'; // 正常執(zhí)行
原因分析如下:
“HELLO”在內(nèi)存中的存儲(chǔ)形式:
指針變量strPtr在內(nèi)存中的存儲(chǔ)形式:(前面是內(nèi)存的地址)
冒號(hào)前面是內(nèi)存的地址,后面存放的是具體內(nèi)容??梢钥闯鲋羔樧兞看鎯?chǔ)的是"HELLO "的第一個(gè)字母的內(nèi)存地址。
str數(shù)組在內(nèi)存中的存儲(chǔ)形式:
冒號(hào)前面是內(nèi)存的地址,后面存放的是具體內(nèi)容。可以看出字符數(shù)組中的每個(gè)元素存儲(chǔ)的是"HELLO "的每個(gè)字母的內(nèi)存地址。
1,printf("%xd\n", &strPtr); // 輸出結(jié)果為:0x00C17BF0
2,printf("%xd\n", strPtr); // 輸出結(jié)果為:0x00907BF0
3,printf("%xd\n", &str); // 輸出結(jié)果為:0x001BA9F0
4,printf("%xd\n", str); // 輸出結(jié)果為:0x001BA9F0
上述1和2中輸出的結(jié)果不同是因?yàn)閟trPtr是一個(gè)變量,變量名作為表達(dá)式時(shí)實(shí)際是取這個(gè)變量中所存取的值。所以1是輸出strPtr這個(gè)變量的地址,而2是輸出strPtr這個(gè)變量存取的值。而3和4輸出的結(jié)果相同是因?yàn)閟tr只是數(shù)組名稱并不是一個(gè)變量。而數(shù)組名稱作為表達(dá)式時(shí)表示的就是這個(gè)數(shù)組第一個(gè)元素的地址。而&str表示的是整個(gè)數(shù)組在內(nèi)存中占用的地址。它是一個(gè)指針數(shù)組,即char (*strArray)[6] = &str;strArray中的每個(gè)元素存取的值就是str這個(gè)數(shù)組各個(gè)元素的內(nèi)存地址。這里輸出時(shí)由于沒(méi)有指定輸出哪個(gè)元素,所以默認(rèn)輸出了strArray的第一個(gè)元素。因此它與4的輸出結(jié)果相同。
從上可以看出,對(duì)數(shù)組str進(jìn)行的運(yùn)算實(shí)際是對(duì)其自身的內(nèi)存地址進(jìn)行的運(yùn)算。即str+1實(shí)際是獲取了str這個(gè)數(shù)組的第2個(gè)元素的地址,而不是這個(gè)數(shù)據(jù)的第2個(gè)元素所存取的地址。獲取的結(jié)果為0x001BA9F1。而對(duì)指針strPtr進(jìn)行的運(yùn)算實(shí)際是對(duì)其所存儲(chǔ)的內(nèi)存地址進(jìn)行的運(yùn)算。即strPtr+1實(shí)際是獲取的其存儲(chǔ)的內(nèi)存地址進(jìn)行加1。獲取的結(jié)果為0x00907BF1。所以,*(str + 1) = 'B';操作實(shí)際只是改變了0x001BA9F這個(gè)地址中所存取的值,而*(strPtr + 1) = 'B';則是要改變0x00907BF1這個(gè)地址中所存取的值。而0x00907BF1這個(gè)地址中存取的是字面量的值,即常量的值,是不允許修改的。所以,執(zhí)行*(strPtr + 1) = 'B';操作時(shí)會(huì)出錯(cuò)。
數(shù)組名str代表的是數(shù)組的首地址,是一個(gè)常量,所以對(duì)其進(jìn)行str++會(huì)出錯(cuò)。因?yàn)椴荒芨淖円粋€(gè)常量的值。而指針strPtr是一個(gè)變量,所以可以進(jìn)行strPtr++操作。
“C++字符數(shù)組與字符指針在運(yùn)算時(shí)的區(qū)別是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
本文題目:C++字符數(shù)組與字符指針在運(yùn)算時(shí)的區(qū)別是什么
鏈接分享:http://fisionsoft.com.cn/article/ggpjdj.html