亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

C++字符數組與字符指針在運算時的區別是什么

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

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

char *strPtr = "HELLO ";

char str[] = "HELLO ";

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

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

原因分析如下:

C++字符數組與字符指針在運算時的區別是什么C++字符數組與字符指針在運算時的區別是什么C++字符數組與字符指針在運算時的區別是什么C++字符數組與字符指針在運算時的區別是什么“HELLO”在內存中的存儲形式:

 C++字符數組與字符指針在運算時的區別是什么

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

C++字符數組與字符指針在運算時的區別是什么 

冒號前面是內存的地址,后面存放的是具體內容。可以看出指針變量存儲的是"HELLO "的第一個字母的內存地址。

str數組在內存中的存儲形式: 

C++字符數組與字符指針在運算時的區別是什么

 冒號前面是內存的地址,后面存放的是具體內容。可以看出字符數組中的每個元素存儲的是"HELLO "的每個字母的內存地址。

1,printf("%xd\n", &strPtr); // 輸出結果為:0x00C17BF0

2,printf("%xd\n", strPtr); // 輸出結果為:0x00907BF0

3,printf("%xd\n", &str); // 輸出結果為:0x001BA9F0

4,printf("%xd\n", str); // 輸出結果為:0x001BA9F0

上述1和2中輸出的結果不同是因為strPtr是一個變量,變量名作為表達式時實際是取這個變量中所存取的值。所以1是輸出strPtr這個變量的地址,而2是輸出strPtr這個變量存取的值。而3和4輸出的結果相同是因為str只是數組名稱并不是一個變量。而數組名稱作為表達式時表示的就是這個數組第一個元素的地址。而&str表示的是整個數組在內存中占用的地址。它是一個指針數組,即char (*strArray)[6] = &str;strArray中的每個元素存取的值就是str這個數組各個元素的內存地址。這里輸出時由于沒有指定輸出哪個元素,所以默認輸出了strArray的第一個元素。因此它與4的輸出結果相同。

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

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

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

向AI問一下細節

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

c++
AI

丰都县| 泽州县| 科尔| 桐乡市| 云龙县| 通州区| 贡觉县| 泽州县| 衡水市| 靖州| 神木县| 巴楚县| 桓台县| 塘沽区| 樟树市| 通海县| 沅江市| 肃北| 鸡泽县| 宁阳县| 大邑县| 晋城| 文水县| 邓州市| 清水河县| 庆云县| 钟山县| 盐池县| 句容市| 仙桃市| 共和县| 龙里县| 环江| 轮台县| 两当县| 吴堡县| 宝兴县| 泽普县| 富平县| 眉山市| 莱西市|