看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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