*(int*)&temp和(int)temp的区别

inti;floattemp;i=*(int*)&temp;和i=(int)temp;二者的不同,特别请高手指教下前者的变化过程和最后temp的变化... int i;float temp;
i=*(int*)&temp;和i=(int)temp;二者的不同,特别请高手指教下前者的变化过程和最后temp的变化
展开
 我来答
斋傲云06
推荐于2016-01-29 · TA获得超过280个赞
知道小有建树答主
回答量:303
采纳率:0%
帮助的人:261万
展开全部
int i = *(int*)&temp和int i = (int)temp是对的
int i = (int)temp是把temp的值取出来转化成int型的,而temp的值还有temp的值的地址不改变
int i = *(int*)&temp是把temp的值的地址取出来,转化成int *的,然后在取值,而temp的值的地址不改变
但是需要注意的是,比如你定义一个double temp = 8.8,用int i = (int)temp的话,i的值为8;而用int i = *(int*)&temp,i的值不是8,在32位机中,double占8个字节,int占4个字节,你把temp的地址转化成整形以后在输出,实际上输出的是double的8个字节中的前四个字节!
8826055
推荐于2018-03-30 · TA获得超过7510个赞
知道大有可为答主
回答量:1680
采纳率:81%
帮助的人:905万
展开全部
两者都是把temp转换成int类型,但转换方式不同。
前者先将一个指向temp的指针转化成指向int类型的指针,再解引用从而得到一个int值;后者直接使用强制类型转换将temp转换为int。
如果temp本来就是int类型,这两者没有区别。如果temp不是int,前者的转换保持存储内容不变,仅仅是将其重新解释为int类型;后者的转换通常只有在内置类型之间才有良好的定义,一般是尽量保持意义不变。比如如果temp=4.5是float类型,使用前者会将temp的前4字节解释为int,使用后者则得到4。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
不是很无知
2012-03-06 · TA获得超过677个赞
知道大有可为答主
回答量:2137
采纳率:0%
帮助的人:1437万
展开全部
1.temp是float型变量,&取他的地址,注意这个地址可以理解成是一个指向float变量的指针,(int*)是把这个地址变成指向int型变量的指针,最后那个*取值。整个运算的过程就是把float变量的值按照int型取出来,在32位机器上就是直接把原来的4bytes的浮点值读成整数值。
2.强制类型转换,会损失精度,但是这个才是比较正常的用法,因为第一种方法等于把浮点数的内存表达直接读出来,值应该和本来的值相差很多。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ggjj741
2012-03-06 · 超过34用户采纳过TA的回答
知道答主
回答量:103
采纳率:0%
帮助的人:79.3万
展开全部
第一个:*(int*)&temp意思是将变量temp强制声明为指向int型的指针变量。
第二个:(int)temp意思是将变量temp强制声明为int型变量。
插件是一个是指针,一个是普通变量。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
夏之心梦
2012-03-06 · TA获得超过1090个赞
知道小有建树答主
回答量:249
采纳率:0%
帮助的人:105万
展开全部
float 型的数据,我还没有见过做位运算的!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式