sizeof运算符不评估子表达式?

时间:2012-07-24 05:32:23

标签: c operators sizeof

  

可能重复:
  Why does sizeof(x++) not increment x?

#include<stdio.h>
int main(void)
{
  double num=5.2;
  int var=5;
  printf("%d\t",sizeof(!num));
  printf("%d\t",sizeof(var=15/2));
  printf("%d",var);
  return 0;
}

该程序提供了输出4 4 5。我不明白为什么会这样。

  • 为什么第一个输出4?
  • 为什么var的值不会更新为7?

sizeof运算符如何工作?

2 个答案:

答案 0 :(得分:3)

表达式

!num
var=15/2

都评估为int。 <{1}}在您的平台上总是4个。

至于为什么var没有更新:

  

sizeof是一个编译时运算符,因此在编译时sizeof及其操作数被结果值替换。根本不评估操作数(除非是可变长度数组);只有结果的类型才重要。

https://stackoverflow.com/a/8225813/141172

答案 1 :(得分:1)

sizeof运算符会显示其参数的飞镖类型的大小。它不返回参数的结果。在您的平台上,一个整数长度为4个字节,这就是您在此处学到的内容。如果您想要结果,只需剪切sizeof