黑马程序员技术交流社区

标题: 强制类型转换后形成的数据有没有分配内存地址 [打印本页]

作者: 帝辰0821    时间: 2014-4-8 17:44
标题: 强制类型转换后形成的数据有没有分配内存地址
本帖最后由 帝辰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型的中间数据,请问一下,这个中间数据有没有分配内存地址啊

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

作者: 星河鹭起    时间: 2014-4-8 22:27
这个肯定是需要内存空间来存储的,计算机中的所有数据都是需要内存来存储的,强制转化就相当于先复制给一个中间变量,就类似数据交换。当转化完毕后,中间变量就会消失。
作者: 戴文婷    时间: 2014-4-8 23:10
星河鹭起 发表于 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
作者: 星河鹭起    时间: 2014-4-8 23:23
戴文婷 发表于 2014-4-8 23:10
诶,是这样吗?我一直以为是这样的,int,float,double 都是要站内存的。int是2个字节,float是4个字节, ...

首先纠正点,int是占用4个字节。在转化时编译器会自动丢弃前面没有使用的字节。例如doubl是8个字节,当要转化成int 4个字节时,会将double所占用最后4个覆盖到Int类型的4个字节中,然后编译器会自动丢弃double中前面4个字节。
作者: 戴文婷    时间: 2014-4-8 23:32
本帖最后由 戴文婷 于 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


补图~~这下搞清楚啦~~~
作者: 帝辰0821    时间: 2014-4-9 14:06
戴文婷 发表于 2014-4-9 13:16
补图~~这下搞清楚啦~~~

这个图一目了然啊
作者: 帝辰0821    时间: 2014-4-9 14:07
lixiangzhou 发表于 2014-4-8 17:50
虽然是中间数据,也是需要存储空间来存储的。你可以这么理解这段代码:
i=(int)x%3;
理解为:

明白了,谢谢啊




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2