作者zzss2003 (brotherD)
看板C_and_CPP
標題Re: [問題] 字元與字串的關係
時間Wed Jan 24 11:32:38 2018
※ 引述《zzss2003 (brotherD)》之銘言:
: hi,魯蛇小弟我在看C How to program 6/e時,看到了這段話:
: "The value of a string is the address of its first character"
: 字串的值是第一個字元的位址
: 所以小弟我做了一個實驗,圖:https://imgur.com/a/wpuXV
: 用GCC編譯的結果,這個string的值為h,並不是h的位址
: 請問各位大大,小弟的實驗在觀念上哪裡有錯誤嗎?
謝謝各位的建議,我把程式碼改成如下(不曉得是不是這樣貼?)
<script src="
https://ideone.com/e.js/5bzuCk" type="text/javascript" ></script>
並且畫了這張圖:
https://imgur.com/a/2YrCK
那書上說的: The value of a string is the address of its first character,在我畫
的圖中所指的就是a,所以string"hello"的值就是0x2b825a9177a4
(有錯請指正,謝謝~)
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.248.26.157
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1516764761.A.BB3.html
1F:噓 moebear: /a/ 01/24 11:42
2F:推 stupid0319: 可以建議Telnet Browser加入Html功能 01/24 12:02
3F:推 dces4212: /a/去掉 大家才可直接看圖 01/24 12:49
4F:→ dces4212: 應該說去掉/a 01/24 12:49
已更正
※ 編輯: zzss2003 (60.248.26.157), 01/24/2018 13:11:04
5F:→ moebear: 去掉a是沒有用的 上車囉 01/24 13:10
6F:→ dces4212: sorry 好像不是直接去掉 我菜雞 01/24 13:18
7F:噓 F04E: 為什麼我看到 (⊙⊙) 是我眼睛業障重嗎? 01/24 13:46
8F:噓 jerryh001: 你的程式碼長的像奶子 01/24 14:02
9F:噓 Phenomenon: 我也看到怪東西 01/24 14:03
11F:→ dces4212: 原po貼的是這張 大家冷靜 我不該說去掉/a的 sorry 01/24 14:04
已更正回來,所以有其他的方式可以讓大家直接看圖不用點進去嗎?二樓的方式怎麼做啊
※ 編輯: zzss2003 (60.248.26.157), 01/24/2018 14:06:12
13F:→ moebear: 右鍵 複製連結網址 01/24 14:35
14F:推 dces4212: 回歸正題一下 你說的a沒問題 想請問一下h = h是啥意思呢 01/24 15:52
拍謝,沒寫清楚,第二行print出來的值是h
※ 編輯: zzss2003 (60.248.26.157), 01/24/2018 16:38:09
15F:→ hunandy14: 我猜是想說這個意思吧 01/24 22:19
16F:→ hunandy14: printf("%p\n", str); 01/24 22:19
17F:→ hunandy14: printf("%p\n", &str[0]); 01/24 22:19
18F:→ hunandy14: 你用 %c 輸出的結果是字元 不是地址 01/24 22:24
對pointer做dereference的結果本來就是h(字元)不是嗎?怎麼會是地址呢?
19F:→ hunandy14: 字串是好幾個連續字元組合,結尾帶 \0 結束 01/24 22:24
20F:→ hunandy14: 字串地址就是也就是這一串的開頭,會是第一個字元 01/24 22:25
※ 編輯: zzss2003 (60.248.26.157), 01/25/2018 10:18:48
21F:推 dogalan: 我覺得樓上說的是對的 這句話的意思就只是str是存第一個 01/25 17:46
22F:→ dogalan: 字元的位址這樣而已 不要想得太複雜 01/25 17:47
23F:→ dogalan: 然後*p不是應該用%s來輸出嗎...你用%c當然只會輸出字元 01/25 17:48
24F:→ hunandy14: 哪裡 deref(*) 第一行直接印,第二行取ref(&) 01/25 21:21