C中赋值运算符的逗号运算符用法

安库·阿加瓦尔(Ankur Agarwal)
#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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章