#include<stdio.h>
int main(void) {
int a=(1, 2), 3;
printf("%d", a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:2
任何人都可以解释输出是2吗?
眠りネ*_*ネロク 62
任何人都可以解释输出是2吗?
因为赋值运算符(=)的优先级高于逗号运算符(,).
因此,声明:
a = (1, 2), 3;
相当于:
(a = (1, 2)), 3;
并且表达式(1, 2)求值为2.
hac*_*cks 29
任何人都可以解释输出是2吗?
在声明中
a = (1, 2), 3;
Run Code Online (Sandbox Code Playgroud)
,used是逗号运算符.由于运算符的=运算符优先级高于运算符的运算符优先级,,表达式操作数(1, 2)将绑定为=as
(a = (1, 2)), 3;
Run Code Online (Sandbox Code Playgroud)
对于逗号运算符,将逗号运算符的左操作数计算为void表达式,然后计算右操作数,结果具有右操作数的值和类型.
这里有两个逗号运算符.对于表达式中的第一个逗号运算符(1, 2),1将被计算为void表达式,然后2将对其进行求值并将其分配给a.
现在副作用a已经发生,因此3将评估第二个逗号运算符的右操作数,并且表达式的值(a = (1, 2)), 3将是3.
| 归档时间: |
|
| 查看次数: |
2816 次 |
| 最近记录: |