C语言中逗号运算符的变量赋值问题及编译报错疑问
C语言逗号相关问题解答
第一个问题:x = 1, 2, 3; 执行后x的值为1的原因
没错,核心原因就是赋值运算符=的优先级高于逗号运算符。
这条语句会被编译器解析成:(x = 1), 2, 3;
逗号运算符的规则是从左到右依次计算每个子表达式,但只有最后一个子表达式的结果会作为整个逗号表达式的返回值。不过在这里,因为优先级的问题,x=1先执行,x被赋值为1;后面的2和3只是被单独计算了一遍,但没有任何变量去接收它们的结果,所以x的值保持1不变。
第二个问题:int x = 1, 2, 3; 编译失败的原因
这条语句里的逗号不是逗号运算符,而是变量声明语法里的变量分隔符。
在C语言的变量声明中,int x = 1, y = 2; 这种写法是用来同时声明多个同类型变量的——这里的逗号是用来分隔x和y这两个变量的。但你写的int x = 1, 2, 3; 里,x之后的2和3没有对应的变量名,不符合声明语法,编译器不知道这两个值该对应哪个变量,所以会报错无法编译。
内容的提问来源于stack exchange,提问作者user174174
相关产品推荐
相关产品推荐

