Re: [問題] 指標型別的疑惑(贈送1000P)

看板C_and_CPP作者 (「雄辯是銀,沉默是金」)時間7年前 (2016/09/19 19:29), 7年前編輯推噓4(400)
留言4則, 3人參與, 最新討論串2/2 (看更多)
※ 引述《wa007123456 (大笨羊)》之銘言: : 開發平台(Platform): (Ex: VC++, GCC, Linux, ...) : VC++ : 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) : 問題(Question): : 我們都知道 為了要讓指標能夠正常運作 : 必須要宣告指標的型別 : 當指標在跳位置取值的時候 才不會跳錯 : 但是小弟今天有一個疑惑 : "那儲存指標的型別資訊是儲存在計算器的哪一部分?" : 也就是說 她怎麼記得這個指標是屬於哪個型別 int main() { int i, j; } 編譯器要為 i, j 在記憶體留個位置, 所以需要知道 int i, j 要給多大, 寫 c 編譯器的人就要去查 c 規格書, 哦 int 我留個 4byte 就符合規格了。 所以會把 0x100 留給 i, 0x104 留給 j。 那如果是 int *p, *q; 呢? 編譯器要留 uintptr_t 的大小給 p, q, 假設 uintptr_t 是 4byte 好了, 所以把 0x108 給 p, 0x10b 給 p。 大小有了, 型別要怎麼紀錄呢? 用表格, p, int * q, int * i, int j, int 這樣編譯器就幫這些變數保留了大小, 也知道這些變數的型別。 0x100 ~ 0x10b 為虛構的位址, 依平台不同而不同。 -- 紙上得來終覺淺,絕知此事要躬行。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 175.98.141.254 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1474284582.A.958.html

09/19 21:39, , 1F
太感謝你了^_^
09/19 21:39, 1F

09/19 21:46, , 2F
感謝幫推
09/19 21:46, 2F

09/20 09:41, , 3F
請問一下 記錄型別的目的是什麼呢? 組譯的時候要用嗎
09/20 09:41, 3F
有很多目的, 隨便舉一個 p 是 int * 所以 *p 是對的, 若 p 是 int, 根本不可以寫 *p, 這時候有這個資訊, 編譯器才能知道 *p 是不是正確的 statement。 又 char *c; int *p; *c; *p; 的動作並不同, 一樣要去查這個表才知道要怎麼做 * 的動作。 ※ 編輯: descent (175.98.141.254), 09/20/2016 11:39:25

09/20 18:27, , 4F
了解 謝謝!
09/20 18:27, 4F
文章代碼(AID): #1NtymcbO (C_and_CPP)
文章代碼(AID): #1NtymcbO (C_and_CPP)