作者jerryjou (等著70歲的妳)
看板Programming
標題Re: [問題] C/C++中char*與char[]的差異
時間Sun Dec 10 14:56:25 2006
※ 引述《swli.bbs@bbs.ntu.edu.tw (我喜歡寫程式)》之銘言:
: ==> jenniskuo.bbs@ptt.cc (冷暖) 提到:
: > 不知道我這樣想對不對,
: > 根據你所說的,
: > char *str = "string"; 這個敘述代表 "str變數" 放在 stack 中,
: > 而 "string" 本身是放在 heap 中.
: > char str[] = "string"; 這個敘述代表 "str常數" 放在常數區段,
: > 而 "string" 本身是放在 stack 中.
: > 是嗎 ?
: 是的, 我的意思大體上就是這樣, 但沒有你說的放常數的區段.
: 藉此修正一個說法, char *str = "string"; 的 "string" 是不是在 heap 中,
: 我並沒有嚴格的去探究,主要的意思是它會被擺在一個安全可供存取的區段裡頭.
: 在char str[]="string"; 宣告中的str 常數, 並不需要放在常數區段或者任何
: 記憶體中, 它就只是個數字罷了. 這個數字或許你可以把它想像成一個標籤,
是不是就是說,char *str = "string"; 這行會分配兩塊記憶體,一塊是存放
"string",一塊是存放 str 這個 pointer。而 char str[] = "string"; 這
一行只會分配一塊記憶體,就是"string" ?
: 在編譯過程中, 只要用到這個常數, compiler 就會直接以這個值去計算記憶體
: 的參考位址.
: 當你直接採用 char str[] = "string"; 的方式宣告一個 local array 時
: 前面有網友也說了, compiler 的動作會類似 直接在 stack 中塞進 's',
: 't', 'r','i','n','g','\0x0', 並賦予 str 這個常數值為存放第一個字元
: 's' 的 memory address 值的常數意義.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.166.129.246
推 meltice:剛好相反 218.211.16.19 12/10 17:45
→ meltice:"string"本身也會佔掉一塊記憶體 218.211.16.19 12/10 20:31