作者descent (「雄辯是銀,沉默是金」)
看板C_and_CPP
標題Re: [問題] 指標型別的疑惑(贈送1000P)
時間Mon Sep 19 19:29:36 2016
※ 引述《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://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1474284582.A.958.html
1F:推 wa007123456: 太感謝你了^_^ 09/19 21:39
2F:推 chuegou: 感謝幫推 09/19 21:46
3F:推 QQ29: 請問一下 記錄型別的目的是什麼呢? 組譯的時候要用嗎 09/20 09:41
有很多目的, 隨便舉一個
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
4F:推 QQ29: 了解 謝謝! 09/20 18:27