#include<stdio.h>
#include<stdlib.h>
int main() {
int x = 5;
int y = 0;
x++, y = x*x;
printf("x is %d\n", x);
printf("y is %d\n", y);
}
问题:为何以上代码的输出为:
x is 6
y is 36
代替
x is 6
y is 25
?
推理:我认为应该是后者,因为赋值运算符具有比逗号更高的优先级,因此,首先y
应该发生to的赋值,将其设置为25
,然后x
应该将其赋值并设置为6
。
优先级与程序的语法树有关,而与程序的执行方式无关。这些优先级级别正在做什么
x++, (y = x*x) /* this is how your programs gets parsed */
和
(x++ , y) = x*x /* this is NOT how it is parsed */
解析完程序后,,
状态的执行规则要求从左到右对表达式进行求值,从而使表达式在x++
之前运行y = x*x
。最后,与,
非常相似;
,不同之处在于您可以将其放在需要表达式而不是语句的位置。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句