C逗号操作员c


#include<stdio.h> 
int main(void) {
   int a;
   a = (1, 2), 3; 
   printf("%d", a);
   return 0;
}

输出:2
任何人都可以解释输出如何2?

任何人都可以解释如何输出2?

因为分配操作员的优先级(=)高于 comma operator ,)。

因此,语句:

a = (1, 2), 3;

等效于:

(a = (1, 2)), 3;

和表达式(1, 2)评估为2

任何人都可以解释如何输出2?

在语句中

a = (1, 2), 3;   

,使用的是逗号操作员。由于=操作员的运算符比,运算符更高,因此表达式操作数(1, 2)将与=绑定为

(a = (1, 2)), 3;  

在逗号运算符的情况下,将逗号运算符的左操作数评估为void表达式,然后评估正确的操作数,结果具有正确的操作数的值和类型。

这里有两个逗号操作员。对于表达式(1, 2)中的第一个逗号运算符,1将评估为void表达式,然后将评估2并将其分配给a
现在已经提出了对a的副作用,因此将评估第二逗号操作员3的正确操作数,并且表达式(a = (1, 2)), 3的值将为3

的结果
a = x, y     =>     x
a = (i, j)   =>     j

因此,如果我们有:

x = (1 , 2)
a = (1 , 2) , 3     =>     2

如下所述:

逗号操作员以某种方式将表达式(具有价值)分开 类似于半隆如何终止语句,序列 表达式与序列的括号相似 陈述的括号中包含:(a,b,c)是 表达式,由逗号隔开,该逗号评估了最后 表达式c时{a;b;c;}是一系列语句,做 没有评估任何价值。逗号只能在两个之间发生 表达式 - 逗号单独的表达式 - 与分号不同, 发生在(非块)陈述的结尾 - 半殖民地 终止语句。

逗号运营商的优先级最低,并且 充当序列。逗号和分号的结合, 半殖民地的优先级低于逗号,因为分离的分离 声明但逗号发生在语句中,这符合 它们用作普通标点符号:a,b;c,d分为(a,b); (c,d)因为这是两个单独的语句。

我希望这可以回答您的问题。

相关内容

  • 没有找到相关文章

最新更新