指针变量所占内存大小

神童i 2017-11-26 11:59:30
指针变量论指向什么类型的变量,它本身所占的内存大小是一定的;

为什么指针变量占的是4个字节,地址为什么是32位?

这32位的地址是由系统决定的,还是编译器?
...全文
728 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
棉猴 2017-11-27
  • 打赏
  • 举报
回复
64位的系统支持64位和32位的编译器;所以个人觉得跟系统和编译器都有关系。
以下是Windows10 64位+VS2015的调试效果

自信男孩 2017-11-27
  • 打赏
  • 举报
回复
64位系统可以安装指针为32位编译器(向前兼容),也可以安装指针为64位的编译器; 因此指针占的字节数,跟编译器有直接关系,跟系统也是有关系的。
老马何以识途 2017-11-27
  • 打赏
  • 举报
回复
我觉得该说得更清楚一些。 首先是平台,32位平台只能执行32位程序,64位平台一般能兼容32位和64位程序(Intel曾经有平台激进的只允许64位,但死了)。说跟编译器有关的朋友,忽略了一个事实:如果编译了64位程序,是不能在32位平台上运行的。 接着来说编译器,如果是32位编译器,即编译成32位程序,则指针都是32位,即4字节;如果编译成64位程序,则指针就是64位,即8字节。
destory27 2017-11-27
  • 打赏
  • 举报
回复
编译器一般是32位的 指针占4个字节
神童i 2017-11-27
  • 打赏
  • 举报
回复
引用 6 楼 ananluowei 的回复:
编译成32位程序,指针4字节,地址32位 编译成64位程序,指针8字节,地址64位
是看编译器吗?
神童i 2017-11-26
  • 打赏
  • 举报
回复
引用 1 楼 hzy_76 的回复:
系统决定的,我们原来都是32位系统,现在基本都是64位了。
意思是64位系统下,变量的地址是64位,指针变量64/8 = 8个字节吗?
老马何以识途 2017-11-26
  • 打赏
  • 举报
回复
系统决定的,我们原来都是32位系统,现在基本都是64位了。
大尾巴猫 2017-11-26
  • 打赏
  • 举报
回复
编译成32位程序,指针4字节,地址32位 编译成64位程序,指针8字节,地址64位
神童i 2017-11-26
  • 打赏
  • 举报
回复
引用 4 楼 adusuccessfully 的回复:
[quote=引用 2 楼 darker0019527 的回复:] [quote=引用 1 楼 hzy_76 的回复:] 系统决定的,我们原来都是32位系统,现在基本都是64位了。
意思是64位系统下,变量的地址是64位,指针变量64/8 = 8个字节吗?[/quote] 不是,64位系统下,指针变量还占得是4字节。[/quote] 为什么64位系统下还是4B?
动力风暴 2017-11-26
  • 打赏
  • 举报
回复
引用 2 楼 darker0019527 的回复:
[quote=引用 1 楼 hzy_76 的回复:] 系统决定的,我们原来都是32位系统,现在基本都是64位了。
意思是64位系统下,变量的地址是64位,指针变量64/8 = 8个字节吗?[/quote] 不是,64位系统下,指针变量还占得是4字节。
xskxzr 2017-11-26
  • 打赏
  • 举报
回复
当然是编译器决定的。64位系统就不能编译32位程序了吗?

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧