2013-10-11 42 views
-1

为什么在gcc编译器中执行时,此代码将输出8作为其输出?基于sizeof运算符

#include<stdio.h> 
double i; 
int main() 
{ 
(int)(float)(char)i; 
printf("%d",sizeof(i)); 
return 0; 
} 
+1

因为您的程序调用了不受欢迎的行为。 – 2013-10-11 11:48:58

+0

您是否想过尝试'sizeof((int)(float)(char)i)'?但是这与'sizeof((int)i)'是一样的。 – glglgl

+1

因为铸造'我'不会改变'我'的类型。 – cyphar

回答

10

由于i类型为double,和double你的平台上大小为8

怪异蒙上不要紧的线,它不会改变的i声明,也不调用sizeof

+0

,所以即使我用任何类型转换它只返回原始声明的类型大小......我是对吗? – Shanpriya

+0

但当我尝试'代码'printf(“%d”,sizeof((int)(float)(char)i));我得到的值为4. – Shanpriya

+2

一个强制转换只是一个产生一个值的操作。它不改变它的操作数。语句'(int)i;'检索'i'的值,将其转换为'int',然后将结果丢弃。就像'i + 1;'甚至'我;'这是一个没有效果的语句(如果你问的话,你的编译器会希望提醒你)。顺便说一句,您应该使用'%zu'来打印sizeof'的结果,或者将其转换为'int'以使其与'%d'匹配。 –

1

类型转换不能减少或增加变量的大小。