中易网

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

答案:4  悬赏:40  
解决时间 2021-02-05 18:32
既然long 跟 指针的大小 不一样勒。
那为什么 int,long long 在32或者64位 还是一样呢?
最佳答案
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语言本身决定。
全部回答
当然是不同平台的C语言编译器导致不同。
强制类型转换 当操作数的类型不同,而且不属于基本数据类型时,经常需要强制类型转换,将操作数转化为所需要的类型。强制类型转换具有两种形式,称为显式强制转换和隐式强制类型转换。 1、显式强制类型转换 显式强制类型转换需要使用强制类型转换运算符,格式如下: type() 或 (type) 其中,type为类型描述符,如int,float等。为表达式。经强制类型转换运算符运算后,返回一个具有type类型的数值,这种强制类型转换操作并不改变操作数本身,运算后操作数本身未改变,例如: int nvar=0xab65; char cchar=char (nvar); 上述强制类型转换的结果是将整型值0xab65的高端两个字节删掉,将低端两个字节的内容作为char型数值赋值给变量cchar,而经过类型转换后nvar的值并未改变。 2、隐式强制类型转换 隐式类型转换发生在赋值表达式和有返回值的函数调用表达式中。在赋值表达式中,如果赋值符左右两侧的操作数类型不同,则将赋值符右边操作数强制转换为赋值符左侧的类型数值后,赋值给赋值符左侧的变量。在函数调用时,如果return后面表达式的类型与函数返回值类型不同,则在返回值时将return后面表达式的数值强制转换为函数返回值类型后,再将值返回,如: int nvar; double dvar=3.88; nvar=dvar;//执行本句后,nvar的值为3,而dvar的值仍是3.88
如果你学习过汇编,你就能够理解了。 在32位的系统中,运算器一次最多可以处理32位的数据,寄存器的最大宽度也是32位的。然后, C语言中对数据宽度的规定是指针变量、long型变量的宽度推荐是处理器一次能够处理的最大宽度,所以就是32位,也就是4个字节。 同理,在64位系统中,运算器、寄存器等一次处理的宽度是64位,也就是8个字节,所以指针变量、long型变量等也就都是8个字节了。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
减肥后脸黑的发黄为什么。
宏泰大药房康宝药店地址有知道的么?有点事想
人民银行40周年纪念币目前究竟是什么价格
听人声最好的耳机
好邻居装饰地址有知道的么?有点事想过去
突然感觉自己的每一个动作,周围的事都过得好
用U盘安装Win7选择安装这后进入Ghost这后出现
P L地址在什么地方,想过去办事
优酷盒子网络异常 但电脑可以上网怎么回事?
核电站 到底是修来做什么的 ???
摩托车电瓶充电器电流选择
徽县中医医院地址有知道的么?有点事想过去
fgoBilibili服安装包谁有啊,求
离婚一个12岁女孩怎么判
关于水果的股票有哪些?
推荐资讯
袁隆平的简介 主要介绍对科学的巨大贡献 50字
村支书贪污多少钱够成犯罪
梦幻西游最强门派是谁?答好了我追加20分
梦幻西游手游9级变身术升级要花费多少
老公总是对你不冷不热,不和你说话是不是外面
风干的干菜在放盐封好保存 算腌制品吗
云霄县好又香面包坊(车站店)地址有谁知道?有
我的左右眼近视是250度,裸视视力是多少
双汇冷鲜肉NO.冀J01-389在哪里啊,我有事要去
王者荣耀买装备那里为什么会不同
买房贷款,大家一般贷多少
常州市创达车辆附件厂地址在什么地方,想过去
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?