编译器在赋值操作期间如何工作?

时间:2014-09-28 06:10:15

标签: c

为什么分配值3?编译器是否只是从列表中取出最后一个值?

int a;
a=(1,2,3);
printf("%d",a);

编译器如何解析此语句或内部如何工作?

2 个答案:

答案 0 :(得分:1)

(1,2,3)中的逗号是逗号运算符。评估为

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

逗号运算符是左关联的。表达式(1,2,3)的结果/值是逗号运算符的右操作数的值。

答案 1 :(得分:0)

正如评论中所指出的,这是因为你正在使用comma operator。这意味着评估并丢弃1和2。这三个是唯一剩下的东西。没有括号,它很可能被指定为1。