为什么在gcc编译器中执行时,此代码将输出8作为其输出?基于sizeof运算符
#include<stdio.h>
double i;
int main()
{
(int)(float)(char)i;
printf("%d",sizeof(i));
return 0;
}
为什么在gcc编译器中执行时,此代码将输出8作为其输出?基于sizeof运算符
#include<stdio.h>
double i;
int main()
{
(int)(float)(char)i;
printf("%d",sizeof(i));
return 0;
}
由于i
类型为double
,和double
你的平台上大小为8
怪异蒙上不要紧的线,它不会改变的i
声明,也不调用sizeof
。
,所以即使我用任何类型转换它只返回原始声明的类型大小......我是对吗? – Shanpriya
但当我尝试'代码'printf(“%d”,sizeof((int)(float)(char)i));我得到的值为4. – Shanpriya
一个强制转换只是一个产生一个值的操作。它不改变它的操作数。语句'(int)i;'检索'i'的值,将其转换为'int',然后将结果丢弃。就像'i + 1;'甚至'我;'这是一个没有效果的语句(如果你问的话,你的编译器会希望提醒你)。顺便说一句,您应该使用'%zu'来打印sizeof'的结果,或者将其转换为'int'以使其与'%d'匹配。 –
类型转换不能减少或增加变量的大小。
因为您的程序调用了不受欢迎的行为。 – 2013-10-11 11:48:58
您是否想过尝试'sizeof((int)(float)(char)i)'?但是这与'sizeof((int)i)'是一样的。 – glglgl
因为铸造'我'不会改变'我'的类型。 – cyphar