看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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)
hilorrk:(1) 9 存在0x000001這個位置, 事實上並沒有真正的儲存空間 05/05 16:40
hilorrk:儲存"陣列在哪", 在 compile time 就可以算出所有陣列相關 05/05 16:40
hilorrk:的位置. (2) 你猜的是對的. 理由同上 05/05 16:41
d 0x000001->0x0000001了..數據9到底在哪呢>_<..混淆中 ※ 編輯: kingofsdtw 來自: 122.117.8.99 (05/05 16:44)
hilorrk:至於原本的問題, char *a, a 是一個指向 abc\0 開頭的指標 05/05 16:43
hilorrk:內容存的是'a'的位置. 其實應該要用 const char * 才正確 05/05 16:44
hilorrk:9存在0x000001, 對 array identifier 取址或直接印都會得 05/05 16:51
hilorrk:到 array 開頭的那個元素的位置. (但是取址得到的指標型態 05/05 16:52
hilorrk:並不相同) 05/05 16:52
hilorrk:我們並不需要真的在run-time allocate 一塊空間給 05/05 16:55
hilorrk:array identifier, 只要相應取代成 array 的第一個元素位 05/05 16:56
hilorrk:置就可以了. 但是在 compile-time 他們仍是不同 type. 05/05 16:57
linotwo:9 原本在機器碼裡面,當程式對 d 做完初始化,會把 05/05 16:57
linotwo:9 從機器碼搬到 d 所指向的 stack 位址 05/05 16:57
hilorrk:這是為什麼大家都會說 "array 就是指向開頭的 pointer" 05/05 16:58