作者VictorTom (鬼翼&娃娃魚)
看板C_and_CPP
標題Re: [問題] 字串用 char[] 跟 char* 的比較
時間Mon Aug 31 20:48:04 2009
※ 引述《kahang (總會有辦法的)》之銘言:
: 之前在看一些C的常見問題
: 看到這段程式碼
: char str1[] = "abc";
: char str2[] = "abc";
: const char str3[] = "abc";
: const char str4[] = "abc";
: const char *str5 = "abc";
: const char *str6 = "abc";
: char *str7 = "abc";
: char *str8 = "abc";
: cout << ( str1 == str2 ) << endl;
str1與str2是宣告兩個char array, 並將初值都設成....
{'a', 'b', 'c', '\0'}, str1與str2各自擁有自己的記憶體空間....
所以str1與str2會在不同的address, 拿它們比較自然不相等....
: cout << ( str3 == str4 ) << endl;
同上, 只是這次str3與str4給定初值後便不得修改其內容....
(應該是指"abc", 如果小弟我沒記錯的話啦....Orz)
理論上, compiler夠聰明的話還是有機會編出str3 == str4吧?_?
: cout << ( str5 == str6 ) << endl;
: cout << ( str7 == str8 ) << endl;
str5678是char指標, 指向一個const char array內容為"abc"的....
所以某段記憶體位置裡面放了"abc"這個常數字串....
str5678則都指向那個字串所在記憶體的address....
不同的是, str56因為宣告成const, 所以str56指到的位址不能更改....
: 結果是 0011
: 可是不知道為什麼 囧
: 有大大可以幫忙解析一下嗎
: 謝謝
以上, 印象中大概是這樣, 有漏誤的再麻煩板上其他強者們補完吧^^||
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.134.41.4
推 kahang:多問一下 我可以找出來str5678指到那個"abc"的位址嗎 08/31 20:55
→ VictorTom:就把str5~8直接以pointer型式印出來吧@_@" 08/31 20:59
→ VictorTom:我只記得它用的位置不是一般的stack或heap這樣@_@" 08/31 21:00
推 kahang:因為在想 如果 cout << str5; 的話會顯示 abc 08/31 21:03
→ kahang:然後 cout << &str5; 的話會是 str5 所在的位址而已 QQ 08/31 21:04
推 suhorng:printf("%p\n", str5); 08/31 21:07
推 kahang:大感謝!!我看到結果了^^ (不過如果是c++要怎麼輸出啊a_a) 08/31 21:11
→ VictorTom:啊不是括一個void*在前面就行了嗎?? 08/31 21:19
推 kahang:嗚 對耶 太久沒寫程式了 囧 謝謝大家 08/31 21:24
推 suhorng:一直在思考C++這樣重載operator<<到底有哪些優缺點……不 09/01 19:42
→ suhorng:過算了 那是沒有結論的吧 09/01 19:42