请在本程序中解释逗号操作员

Swa*_*amy 14 c comma

请解释一下这个程序的输出:

int main()
{    
    int a,b,c,d;  
    a=10;  
    b=20;  
    c=a,b;  
    d=(a,b);  
    printf("\nC= %d",c);  
    printf("\nD= %d",d);  
}
Run Code Online (Sandbox Code Playgroud)

我得到的输出是:

C= 10  
D= 20
Run Code Online (Sandbox Code Playgroud)

我怀疑"运营商"在这里做了什么?
我使用代码块编译并运行程序.

Edu*_*rdo 23

,运算符计算一系列表达式并返回最后的值.

c=a,b是一样的(c=a),b.这就是为什么c是10

c=(a,b)将结果a,b,即20,分配给c.

正如Mike在评论中指出的那样,assignment(=)的优先级高于逗号

  • +和`=`的优先级高于`,`. (2认同)

Udo*_*ein 11

嗯,这是关于运算符优先级:

c=a,b
Run Code Online (Sandbox Code Playgroud)

相当于

(c=a),b
Run Code Online (Sandbox Code Playgroud)

关键是,","运算符将返回第二个值.

从而

c=a,b
Run Code Online (Sandbox Code Playgroud)

将a分配给c并返回b

d=(a,b) 
Run Code Online (Sandbox Code Playgroud)

返回b并将其分配给d


小智 5

逗号运算符计算其所有操作数,然后生成最后一个表达式的值。