溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

C++字符數(shù)組與字符指針在運算時的區(qū)別是什么

發(fā)布時間:2021-08-31 18:23:48 來源:億速云 閱讀:148 作者:chen 欄目:編程語言

本篇內(nèi)容介紹了“C++字符數(shù)組與字符指針在運算時的區(qū)別是什么”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

char *strPtr = "HELLO ";

char str[] = "HELLO ";

*(strPtr + 1) = 'B'; // 出錯

*(str + 1) = 'B'; // 正常執(zhí)行

原因分析如下:

C++字符數(shù)組與字符指針在運算時的區(qū)別是什么C++字符數(shù)組與字符指針在運算時的區(qū)別是什么C++字符數(shù)組與字符指針在運算時的區(qū)別是什么C++字符數(shù)組與字符指針在運算時的區(qū)別是什么“HELLO”在內(nèi)存中的存儲形式:

 C++字符數(shù)組與字符指針在運算時的區(qū)別是什么

 指針變量strPtr在內(nèi)存中的存儲形式:(前面是內(nèi)存的地址)

C++字符數(shù)組與字符指針在運算時的區(qū)別是什么 

冒號前面是內(nèi)存的地址,后面存放的是具體內(nèi)容??梢钥闯鲋羔樧兞看鎯Φ氖?quot;HELLO "的第一個字母的內(nèi)存地址。

str數(shù)組在內(nèi)存中的存儲形式: 

C++字符數(shù)組與字符指針在運算時的區(qū)別是什么

 冒號前面是內(nèi)存的地址,后面存放的是具體內(nèi)容??梢钥闯鲎址麛?shù)組中的每個元素存儲的是"HELLO "的每個字母的內(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é)果不同是因為strPtr是一個變量,變量名作為表達式時實際是取這個變量中所存取的值。所以1是輸出strPtr這個變量的地址,而2是輸出strPtr這個變量存取的值。而3和4輸出的結(jié)果相同是因為str只是數(shù)組名稱并不是一個變量。而數(shù)組名稱作為表達式時表示的就是這個數(shù)組第一個元素的地址。而&str表示的是整個數(shù)組在內(nèi)存中占用的地址。它是一個指針數(shù)組,即char (*strArray)[6] = &str;strArray中的每個元素存取的值就是str這個數(shù)組各個元素的內(nèi)存地址。這里輸出時由于沒有指定輸出哪個元素,所以默認輸出了strArray的第一個元素。因此它與4的輸出結(jié)果相同。

從上可以看出,對數(shù)組str進行的運算實際是對其自身的內(nèi)存地址進行的運算。即str+1實際是獲取了str這個數(shù)組的第2個元素的地址,而不是這個數(shù)據(jù)的第2個元素所存取的地址。獲取的結(jié)果為0x001BA9F1。而對指針strPtr進行的運算實際是對其所存儲的內(nèi)存地址進行的運算。即strPtr+1實際是獲取的其存儲的內(nèi)存地址進行加1。獲取的結(jié)果為0x00907BF1。所以,*(str + 1) = 'B';操作實際只是改變了0x001BA9F這個地址中所存取的值,而*(strPtr + 1) = 'B';則是要改變0x00907BF1這個地址中所存取的值。而0x00907BF1這個地址中存取的是字面量的值,即常量的值,是不允許修改的。所以,執(zhí)行*(strPtr + 1) = 'B';操作時會出錯。

數(shù)組名str代表的是數(shù)組的首地址,是一個常量,所以對其進行str++會出錯。因為不能改變一個常量的值。而指針strPtr是一個變量,所以可以進行strPtr++操作。

“C++字符數(shù)組與字符指針在運算時的區(qū)別是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

c++
AI