[問題] 字串指標內容

看板C_and_CPP作者 (不能閒下來!!)時間13年前 (2012/05/05 16:35), 編輯推噓0(0014)
留言14則, 2人參與, 最新討論串1/2 (看更多)
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) dev_C++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): char *a="abc" a的內容是啥? 堆疊空間的位址?還是"abc"? 餵入的資料(Input): 預期的正確結果(Expected Output): a=0x00FFABC 錯誤結果(Wrong Output): "abc" 程式碼(Code):(請善用置底文網頁, 記得排版) 補充說明(Supplement): 除錯: (1)int *ptr符合指標原則 http://codepad.org/XcwhwwwL *額外發現陣列名稱d[]={9,2}會指向自己 假設&d的位址是 0x000001 ,d則是0x000001,那9到底儲存在哪呢?指標有兩個儲存空間? (2)char b[]="abc" http://codepad.org/wJRh0cqj *發現&b[0]指向0x28ff3C,但是將&b[0]用printf("%s")輸出會是abc *猜測%s接受的是位址,會從0x28ff3C位址一直讀到\0結束,而不是把0x28ff3c轉成字串 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.117.8.99 ※ 編輯: kingofsdtw 來自: 122.117.8.99 (05/05 16:38)

05/05 16:40, , 1F
(1) 9 存在0x000001這個位置, 事實上並沒有真正的儲存空間
05/05 16:40, 1F

05/05 16:40, , 2F
儲存"陣列在哪", 在 compile time 就可以算出所有陣列相關
05/05 16:40, 2F

05/05 16:41, , 3F
的位置. (2) 你猜的是對的. 理由同上
05/05 16:41, 3F
d 0x000001->0x0000001了..數據9到底在哪呢>_<..混淆中 ※ 編輯: kingofsdtw 來自: 122.117.8.99 (05/05 16:44)

05/05 16:43, , 4F
至於原本的問題, char *a, a 是一個指向 abc\0 開頭的指標
05/05 16:43, 4F

05/05 16:44, , 5F
內容存的是'a'的位置. 其實應該要用 const char * 才正確
05/05 16:44, 5F

05/05 16:51, , 6F
9存在0x000001, 對 array identifier 取址或直接印都會得
05/05 16:51, 6F

05/05 16:52, , 7F
到 array 開頭的那個元素的位置. (但是取址得到的指標型態
05/05 16:52, 7F

05/05 16:52, , 8F
並不相同)
05/05 16:52, 8F

05/05 16:55, , 9F
我們並不需要真的在run-time allocate 一塊空間給
05/05 16:55, 9F

05/05 16:56, , 10F
array identifier, 只要相應取代成 array 的第一個元素位
05/05 16:56, 10F

05/05 16:57, , 11F
置就可以了. 但是在 compile-time 他們仍是不同 type.
05/05 16:57, 11F

05/05 16:57, , 12F
9 原本在機器碼裡面,當程式對 d 做完初始化,會把
05/05 16:57, 12F

05/05 16:57, , 13F
9 從機器碼搬到 d 所指向的 stack 位址
05/05 16:57, 13F

05/05 16:58, , 14F
這是為什麼大家都會說 "array 就是指向開頭的 pointer"
05/05 16:58, 14F
文章代碼(AID): #1FfEPTBs (C_and_CPP)
文章代碼(AID): #1FfEPTBs (C_and_CPP)