为什么sizeof()运算符在C中的输出不同

msc*_*msc -4 c casting sizeof

我在测试你的c中看到了以下例子(作者:Yashvant Kanetkar).

在下面的示例中,sizeof()给出输出8.

#include<stdio.h>

double d;

int main()
{
(int)(float)(char)d;
printf("%d\n",sizeof(d));
}
Run Code Online (Sandbox Code Playgroud)

但在第二个例子中,sizeof()给出了输出4.

#include<stdio.h>

double d;

int main()
{
printf("%d\n",sizeof((int)(float)(char)d));
}
Run Code Online (Sandbox Code Playgroud)

为什么两个输出不同?书中没有解释.

Sou*_*osh 9

第一种情况相当于sizeof(double).演员阵容在那里毫无用处.有效类型的d遗体不变.编译代码并启用适当的警告,你会看到一些警告

警告:声明无效[-Wunused-value]

第二个相当于sizeof(int),演员表是有效的.

您将根据您的平台/环境查看结果(int或的大小double).

那说,

  • sizeof产生类型的结果size_t,您必须使用%zu格式说明符来打印结果.
  • 至少main()在托管环境中符合签名int main(void).