您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“C++的char[]和char*變量有什么不同”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“C++的char[]和char*變量有什么不同”吧!
在C/C++
編程中,如果對char[]和char*對象進(jìn)行比較,當(dāng)然一般來說可以使用strcmp
方法,但是如果直接使用==
會產(chǎn)生什么結(jié)果呢,如下面的程序:
#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的方式打印
這個程序很簡單,不需要太多的解釋。
最后打出的結(jié)果可能會感覺應(yīng)該都是false
,但是實(shí)際的結(jié)果是:
第一個打出的是false
,而第二個打出的是true
那么為什么會有這種結(jié)果呢,首先需要知道的是==
比較的不是指向的內(nèi)容abc
,比較的是各個str
對象中存儲的是指向內(nèi)容的地址,換句話說就是abc
的地址,是它們本身的存儲的值。
Array
對象
對Array
對象來說,是運(yùn)行時在??臻g上分配的內(nèi)存,所以每個對象都是單獨(dú)去申請內(nèi)存,各自保存一份自己的abc
,所以Array
對象存儲的地址也是不一樣的,所以第一個結(jié)果是false
;
Pointer
對象
對Pointer
對象來說,兩個字符指針并沒有分配相應(yīng)的存儲區(qū),是后面的abc
是以常量的形式存在常量區(qū),然后把首地址的值賦值給了Pointer
對象,所以Pointer
對象存儲的地址應(yīng)該來說是一樣的,所以第二個結(jié)果是true
;
其實(shí)可以想到通過打印相關(guān)的地址來查看結(jié)果是否正確,但這里會有個問題:
數(shù)組對象
下面直接打印數(shù)組對象,其實(shí)是打印的數(shù)組對象的內(nèi)容,結(jié)果都是abc
cout << strArray1 << endl;cout << strArray2 << endl;
對于數(shù)組對象可以這樣打印數(shù)組的首地址,可以從這里看出這兩個地址是不同的,即兩個abc
存儲在不同的空間
cout << &strArray1 << endl;cout << &strArray2 << endl;
指針對象
下面直接打印指針對象,其實(shí)是打印的也是指針對象的內(nèi)容,結(jié)果都是abc
,這樣打印按道理來說應(yīng)該是打印的字符串的首地址,是因?yàn)閷?code>cout進(jìn)行了重載,打印字符指針時,給出地址不是打印地址內(nèi)容,而是打印相對的字符的內(nèi)容,所以會得到abc
結(jié)果
cout << strPointer1 << endl;cout << strPointer2 << endl;
但是如果取該指針的地址來打印的話,結(jié)果兩個地址是不對的,因?yàn)榇藭r打印的不是指向的字符串的首地址了,而是該指針的地址,當(dāng)然不一樣
cout << &strPointer1 << endl;cout << &strPointer2 << endl;
如果要獲取指針對象的字符串的首地址的值的話,需要讓cout
輸出符不認(rèn)為它是一個字符指針,這樣就不會產(chǎn)生重載操作了,這樣可以看到兩個地址是相同的
cout << (void*)strPointer1 << endl;cout << (void*)strPointer2 << endl;
到此,相信大家對“C++的char[]和char*變量有什么不同”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。