Re: [問題] 字串用 char[] 跟 char* 的比較

看板C_and_CPP作者 (鬼翼&娃娃魚)時間14年前 (2009/08/31 20:48), 編輯推噓6(605)
留言11則, 3人參與, 最新討論串2/2 (看更多)
※ 引述《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

08/31 20:55, , 1F
多問一下 我可以找出來str5678指到那個"abc"的位址嗎
08/31 20:55, 1F

08/31 20:59, , 2F
就把str5~8直接以pointer型式印出來吧@_@"
08/31 20:59, 2F

08/31 21:00, , 3F
我只記得它用的位置不是一般的stack或heap這樣@_@"
08/31 21:00, 3F

08/31 21:03, , 4F
因為在想 如果 cout << str5; 的話會顯示 abc
08/31 21:03, 4F

08/31 21:04, , 5F
然後 cout << &str5; 的話會是 str5 所在的位址而已 QQ
08/31 21:04, 5F

08/31 21:07, , 6F
printf("%p\n", str5);
08/31 21:07, 6F

08/31 21:11, , 7F
大感謝!!我看到結果了^^ (不過如果是c++要怎麼輸出啊a_a)
08/31 21:11, 7F

08/31 21:19, , 8F
啊不是括一個void*在前面就行了嗎??
08/31 21:19, 8F

08/31 21:24, , 9F
嗚 對耶 太久沒寫程式了 囧 謝謝大家
08/31 21:24, 9F

09/01 19:42, , 10F
一直在思考C++這樣重載operator<<到底有哪些優缺點……不
09/01 19:42, 10F

09/01 19:42, , 11F
過算了 那是沒有結論的吧
09/01 19:42, 11F
文章代碼(AID): #1AcyQ5pD (C_and_CPP)
文章代碼(AID): #1AcyQ5pD (C_and_CPP)