中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

老河口市| 临城县| 雷波县| 资中县| 读书| 宁城县| 辽宁省| 健康| 安化县| 宁乡县| 奎屯市| 施秉县| 滁州市| 台北县| 远安县| 文水县| 荔浦县| 尖扎县| 全南县| 福贡县| 诸暨市| 犍为县| 兴文县| 大厂| 广平县| 明光市| 泰宁县| 连州市| 陇西县| 叶城县| 城步| 西昌市| 平利县| 蓬安县| 蒙山县| 宁国市| 左权县| 和政县| 上蔡县| 阳城县| 长葛市|