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

溫馨提示×

溫馨提示×

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

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

C++的char[]和char*變量有什么不同

發布時間:2021-11-29 15:25:41 來源:億速云 閱讀:155 作者:iii 欄目:大數據

本篇內容主要講解“C++的char[]和char*變量有什么不同”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“C++的char[]和char*變量有什么不同”吧!

問題描述

C/C++編程中,如果對char[]和char*對象進行比較,當然一般來說可以使用strcmp方法,但是如果直接使用==會產生什么結果呢,如下面的程序:

#include <iostream>using namespace std;int main() {char strArray1[] = "abc";char strArray2[] = "abc";cout << boolalpha << (strArray1 == strArray2) << endl; char* strPointer1 = "abc";char* strPointer2 = "abc";cout << boolalpha << (strPointer1 == strPointer2 ) << endl;
}

boolalpha 方法是為了以true或者false的方式打印

這個程序很簡單,不需要太多的解釋。
最后打出的結果可能會感覺應該都是false,但是實際的結果是:
第一個打出的是false,而第二個打出的是true

問題分析

那么為什么會有這種結果呢,首先需要知道的是==比較的不是指向的內容abc,比較的是各個str對象中存儲的是指向內容的地址,換句話說就是abc的地址,是它們本身的存儲的值。

  1. Array對象
    Array對象來說,是運行時在棧空間上分配的內存,所以每個對象都是單獨去申請內存,各自保存一份自己的abc,所以Array對象存儲的地址也是不一樣的,所以第一個結果是false

  2. Pointer對象
    Pointer對象來說,兩個字符指針并沒有分配相應的存儲區,是后面的abc是以常量的形式存在常量區,然后把首地址的值賦值給了Pointer對象,所以Pointer對象存儲的地址應該來說是一樣的,所以第二個結果是true

注意事項

其實可以想到通過打印相關的地址來查看結果是否正確,但這里會有個問題:

數組對象
下面直接打印數組對象,其實是打印的數組對象的內容,結果都是abc

cout << strArray1 << endl;cout << strArray2 << endl;

對于數組對象可以這樣打印數組的首地址,可以從這里看出這兩個地址是不同的,即兩個abc存儲在不同的空間

cout << &strArray1 << endl;cout << &strArray2 << endl;

指針對象
下面直接打印指針對象,其實是打印的也是指針對象的內容,結果都是abc,這樣打印按道理來說應該是打印的字符串的首地址,是因為對cout進行了重載,打印字符指針時,給出地址不是打印地址內容,而是打印相對的字符的內容,所以會得到abc結果

cout << strPointer1 << endl;cout << strPointer2 << endl;

但是如果取該指針的地址來打印的話,結果兩個地址是不對的,因為此時打印的不是指向的字符串的首地址了,而是該指針的地址,當然不一樣

cout << &strPointer1 << endl;cout << &strPointer2 << endl;

如果要獲取指針對象的字符串的首地址的值的話,需要讓cout輸出符不認為它是一個字符指針,這樣就不會產生重載操作了,這樣可以看到兩個地址是相同的

cout << (void*)strPointer1 << endl;cout << (void*)strPointer2 << endl;

到此,相信大家對“C++的char[]和char*變量有什么不同”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

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

c++
AI

定陶县| 湘潭市| 西林县| 遵化市| 托克逊县| 哈尔滨市| 玉树县| 蒙阴县| 乌恰县| 梧州市| 吉林省| 瓮安县| 鄂尔多斯市| 绥阳县| 土默特左旗| 定西市| 宜兴市| 博白县| 揭阳市| 乐都县| 桐梓县| 尉氏县| 上杭县| 阿尔山市| 夏津县| 普兰店市| 霍州市| 友谊县| 五原县| 霍城县| 罗定市| 鸡泽县| 安龙县| 温州市| 策勒县| 台前县| 石柱| 海城市| 天峻县| 东辽县| 德昌县|