c语言中,为什么在64位系统中long跟指针的大小是8,而32位的却是4?是什么导致不一样?求详细解答

既然long跟指针的大小不一样勒。那为什么int,longlong在32或者64位还是一样呢?... 既然long 跟 指针的大小 不一样勒。
那为什么 int,long long 在32或者64位 还是一样呢?
展开
 我来答
百度网友6fe74e2
推荐于2017-09-07 · TA获得超过6594个赞
知道大有可为答主
回答量:1973
采纳率:100%
帮助的人:325万
展开全部
64位系统,这个位数指的是CPU 里面的通用寄存器的数据宽度为64位,也就是说一个地址占二进制位数是64,所以sizeof(double *)==sizeof(int *)==sizeof(char *)==64/8==8
32位系统,同理,他的一个地址占32位二进制空间,sizeof(double *)==sizeof(int *)==sizeof(char *)==32/8==4
其实明白了两个系统的寻址原理就能明白,大体就是这个原因。

地址跟系统有关,但是基本数据类型占的大小是由C语言本身决定。
维多K
2013-01-31 · TA获得超过413个赞
知道小有建树答主
回答量:169
采纳率:0%
帮助的人:180万
展开全部
如果你学习过汇编,你就能够理解了。

在32位的系统中,运算器一次最多可以处理32位的数据,寄存器的最大宽度也是32位的。然后, C语言中对数据宽度的规定是指针变量、long型变量的宽度推荐是处理器一次能够处理的最大宽度,所以就是32位,也就是4个字节。

同理,在64位系统中,运算器、寄存器等一次处理的宽度是64位,也就是8个字节,所以指针变量、long型变量等也就都是8个字节了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dashllh
2013-01-31 · TA获得超过1871个赞
知道小有建树答主
回答量:553
采纳率:0%
帮助的人:177万
展开全部
当然是不同平台的C语言编译器导致不同。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tianbin1982ren
2017-09-07 · 超过17用户采纳过TA的回答
知道答主
回答量:58
采纳率:0%
帮助的人:33万
展开全部
64位win7,VS2010控制台程序中
sizeof(long*) 是4而不是8。
应该和编译器的定义有关。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ssgo66
2013-01-31 · TA获得超过143个赞
知道小有建树答主
回答量:229
采纳率:0%
帮助的人:130万
展开全部
根据地址数据总线来定的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式