今天看到一道c++的筆試題,感覺不錯!記錄一下。
char str1 = "abc";
char str2 = "abc";
constchar str3 = "abc";
constchar str4 = "abc";
constchar* str5 = "abc";
constchar* str6 = "abc";
cout << (str1 == str2) << endl; //true or false
cout << (str3 == str4) << endl;
cout << (str5 == str6) << endl;**如上,給出列印結果。
如果不了解陣列與指標的區別的話,基本上答不出來這道題。下面我們來分析一下。
「char str1 = "abc";」的含義是定義乙個char型陣列str1,初始化為abc。"abc"是乙個常量,應該儲存在常量儲存區。那麼是不是str1就等於"abc"的位址呢?當然不是!str1是乙個變數,儲存在棧中,這句話的意思是在棧中申請大小為4的空間,儲存"abc"(包括\0)。同理,「char str2 = "abc";」也是在棧中申請了額外的空間儲存"abc",也就是說,現在有3個"abc"字串,分別儲存在棧中和常量儲存區。那麼我們應該清楚了,str1不等於str2。
對於「const char str3 = "abc";」,大家千萬別被const欺騙了。我們知道,使用const定義的變數一般是不分配記憶體的,而是儲存在符號表中。但是對於const陣列來講,系統不確定符號表是否有足夠的空間來存放const陣列,所以還是為const陣列分配記憶體的。所以str3指向的是棧上的"abc"。同理「const char str4 = "abc";」也是一樣。所以str3和str4不相同。
對於「const char* str5 = "abc";」,str5是乙個指標,儲存在符號表上,指向的是常量儲存區中的"abc"。「const char* str5 = "abc";」中str6也是指向常量儲存區中的"abc",所以str5等於str6。
我還產生乙個懷疑,就是我們看到的"abc"是否都是同乙個"abc"。不妨試一試下面的**:
char str1 = "abc";
char str2 = "abc";
constchar str3 = "abc";
constchar str4 = "abc";
constchar* str5 = "abc";
constchar* str6 = "abc";
cout << (str1 == str2) << endl; //true or false
cout << (str3 == str4) << endl;
cout << (str5 == str6) << endl;
cout<列印結果是
嗯,正好驗證了我們的想法。str1、str2、str3、str4都是指向棧空間的,而且這些變數是連續分配的,從這我們也可以看出棧空間分配的策略。str5和str6指向相同的位址,都是常量"abc"的位址。
好了,本文今天就寫到這了。
一道筆試題
看到一道筆試題,跟自己想的有點出入,就跑了下,看了看原因。我稍微改了下 include int main int argc,char argv 輸出結果 c 5 d 245 press any key to continue vc6.0 debug下的彙編 5 unsigned char a 0xa...
一道筆試題
上次去筆試的時候,有一道題,怎麼也沒做出來,當時也是很緊張,有些思路,但卻沒有做出來。有四個人要過乙個獨木橋,因為天比較黑,而且橋只能允許兩個人同時通過,並且他們只有乙個手電筒。四個人單獨同時橋的時間是1,2,5,8分鐘。問最短的時間是多少?當時我的答案 1和8,1回來,1 5,1回來,1 2 8 ...
一道筆試題
題目是這樣的 判斷乙個小於1000的正整數是否為素數。素數的定義就不說了,以下直接分析解法,畢竟是在寫與專業相關的東西,是給本專業的人看得,所以看的人應該有點基礎吧?求素數的問題是乙個數學上的難題,這是常識,但是本題目限制了最大範圍是在1000以內,所以就可以嘗試找出乙個足夠好的解了。首先給出乙個最...