c - "sizeof"的结果取决于括号的位置。为什么?

标签 c expression sizeof operator-precedence unary-operator

有一个代码:

 float x=-8.92;
 int y=5;
 printf("%u\n", sizeof x+y);
 printf("%u\n", sizeof (x+y));

结论:

9
4

为什么会这样(结果 9)?毕竟,这些都是简单的一元运算。

最佳答案

sizeof运算符的优先级高于二元加法运算符 + .所以这个:

sizeof x+y

解析为:

(sizeof x)+y

所以在第一个表达式中你得到了 float 的大小在您的系统上为 4,然后将值 5 添加到该值,结果为 9。对于第二个表达式,子表达式 x+y类型为 float因为通常的算术转换,所以结果是打印出来的 4。

关于c - "sizeof"的结果取决于括号的位置。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65439117/

相关文章:

c - C 中 Infix-to-Postfix 程序的操作数之间的间距

c++ - 通过SHELLEXECUTEINFO将参数发送到.exe

c - C11 表达式中的赋值运算符排序

c - 系统的 Makefile

c - 使用Windows GUI输入十进制值并显示相应的十六进制值

java - 表达式的类型必须是数组类型但它解析为 String

c# - 替换表达式树中的类型

c++ - 我可以在不创建结构实例的情况下获得结构字段的大小吗?

C++ 模板优化

c - 对于空终止字符串,strlen 有时等于 sizeof