A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 帝辰0821 于 2014-4-9 22:44 编辑
  1. # include <stdio>
  2. void main()
  3. {
  4.   float x;
  5.   int i;
  6.   x=32767.0;
  7.   i=(int)x%3;
  8.   printf(“x=%f,i=%d\n”,x,i);
  9. }
复制代码
其中,i=(int)x%3;为将x强制转换为整型,会得到一个int型的中间数据,请问一下,这个中间数据有没有分配内存地址啊

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

8 个回复

倒序浏览
虽然是中间数据,也是需要存储空间来存储的。你可以这么理解这段代码:
i=(int)x%3;
理解为:
{
    int temp = (int)x;
    i = temp % 3;
}
这样temp只在计算的时候分配了存储空间,计算之后就销毁了存储空间

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
这个肯定是需要内存空间来存储的,计算机中的所有数据都是需要内存来存储的,强制转化就相当于先复制给一个中间变量,就类似数据交换。当转化完毕后,中间变量就会消失。
回复 使用道具 举报
星河鹭起 发表于 2014-4-8 22:27
这个肯定是需要内存空间来存储的,计算机中的所有数据都是需要内存来存储的,强制转化就相当于先复制给一个 ...

诶,是这样吗?我一直以为是这样的,int,float,double 都是要站内存的。int是2个字节,float是4个字节,double是8个字节。然后,double转float的时候,double就扔掉4位,把剩下的4位给float。

float转int也是这样,float是4位,给int的时候扔掉2位,剩余2位给int

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
戴文婷 发表于 2014-4-8 23:10
诶,是这样吗?我一直以为是这样的,int,float,double 都是要站内存的。int是2个字节,float是4个字节, ...

首先纠正点,int是占用4个字节。在转化时编译器会自动丢弃前面没有使用的字节。例如doubl是8个字节,当要转化成int 4个字节时,会将double所占用最后4个覆盖到Int类型的4个字节中,然后编译器会自动丢弃double中前面4个字节。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 戴文婷 于 2014-4-8 23:44 编辑
星河鹭起 发表于 2014-4-8 23:23
首先纠正点,int是占用4个字节。在转化时编译器会自动丢弃前面没有使用的字节。例如doubl是8个字节,当要 ...

噢~~~记错了。谢谢纠正。也再补点。如果是int转double的话,int4位转到8位double 不足的补0,是不?
回复 使用道具 举报


补图~~这下搞清楚啦~~~
回复 使用道具 举报
戴文婷 发表于 2014-4-9 13:16
补图~~这下搞清楚啦~~~

这个图一目了然啊
回复 使用道具 举报
lixiangzhou 发表于 2014-4-8 17:50
虽然是中间数据,也是需要存储空间来存储的。你可以这么理解这段代码:
i=(int)x%3;
理解为:

明白了,谢谢啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马