作者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/cn.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