【问题标题】:sizeof operator doesn't evaluate the subexpression? [duplicate]sizeof 运算符不计算子表达式? [复制]
【发布时间】:2023-04-08 23:31:02
【问题描述】:

可能重复:
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 运算符是如何工作的?

【问题讨论】:

  • 虽然我接受我的问题恰好与 SO 上的另一个问题重复,但更合适的标题指向另一个问题,我可能从未提出过这个问题。没有出现在搜索中。无论如何,谢谢大家。

标签: c operators sizeof


【解决方案1】:

表达式

!num
var=15/2

两者都计算为 int。 sizeof(int) 在您的平台上始终为 4。

至于为什么var没有更新:

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

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

【讨论】:

  • var怎么没更新??
  • @sasidhar:请查看 Mystical 在您的问题下的评论。
【解决方案2】:

sizeof 运算符向您显示其参数的飞镖 type 的大小。它不返回参数的结果。在您的平台上,一个整数是 4 个字节长,这就是您在这里学到的。如果您想要结果,只需删除sizeof

【讨论】:

    猜你喜欢
    • 2014-12-11
    • 2014-09-15
    • 2011-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多