所以我在某个地方遇到了这个问题:
Case 1:
int a;
a = 1, 2, 3;
printf("%d", a);
Case 2:
int a = 1, 2, 3;
printf("%d", a);
解释说:
第二种情况会出错,因为逗号用作分隔符,在第一种情况下=
优先于,
所以基本上是(a=1), 2, 3
;
但我想问为什么=
不优先于,
在案例2中?
这不仅仅是一个优先级问题,而且是一个语言语法问题:=
在这两种情况下不是同一个运算符:
在声明中int a = 1, 2, 3;
, the =
token 引入了一个不能是逗号表达式的初始值设定项。这,
结束初始化程序并且编译器发出错误,因为2
不是另一个变量的有效标识符。
在声明中a = 1, 2, 3;
, a = 1, 2, 3
是一个表达式,解析为((a = 1), 2), 3
因为=
优先级高于,
. =
是赋值运算符,其右侧是表达式,此赋值是逗号运算符的左操作数,
后面跟着一个常量表达式2
, a = 1, 2
本身是最终的左操作数,
右操作数为的运算符3
。该语句相当于((a = 1), 2), 3);
,简化为a = 1;
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)