基于sizeof运算符

Sha*_*iya -1 c gcc casting type-conversion

在gcc编译器中执行时,为什么此代码打印8作为其输出?

#include<stdio.h>
double i;
int main()
{
(int)(float)(char)i;
printf("%d",sizeof(i));
return 0;
}
Run Code Online (Sandbox Code Playgroud)

unw*_*ind 10

因为类型idouble,并且double您平台上的大小是8.

奇怪的强制转换线并不重要,它不会改变声明i,也不会改变sizeof调用.

  • 演员表只是一个产生价值的操作.它不会改变它的操作数.语句`(int)i;`检索`i`的值,将其转换为`int`,然后将结果抛弃.就像`i + 1;`甚至是`i;`这是一个没有效果的声明(如果你问的话,你的编译器会希望警告你).顺便说一句,你应该使用'%zu`来打印`sizeof`的结果,或者把它转换成`int`以使它匹配`%d`. (2认同)