考虑以下代码片段案例1:
int main() {
int a;
a=printf("hello"),printf("joke");
printf("%d",a);
return 0;
}
案例2:
int main() {
int a;
a=(printf("hello"),printf("joke"));
printf("%d",a);
return 0;
}
案例3:
int main() {
int a;
a=10>8?(printf("hello"),printf("joke")):printf("hello");
printf("%d",a);
return 0;
}
案例4:
int main() {
int a;
a=10>8?printf("hello"),printf("joke"):printf("hello");
printf("%d",a);
return 0;
}
我无法理解这样一个原因,即当我在情况2中使用括号时,我得到的输出为hellojoke4,而如果不使用泛神论,我得到输出为hello joke5。
根据输出,当我尝试使用三元运算符时,相同的表达式在使用括号或不使用括号执行时,返回printf语句的最后一个输出值hellojoke4,那么在三元运算符的情况下,行为有何不同。括号的存在如何影响逗号的工作,它的作用是像分隔符还是像运算符
这一切都取决于逗号运算符的低优先级。如果没有括号,表达式将分组为
(a=printf("hello")), printf("joke");
因此,从第一个printf分配给a
,然后是第二个printf
。在第二示例中,第二printf
的结果被分配给a
。
简化:
a = 1, 2; // (a = 1), 2; post-condition a==1
a = (1, 2); // a = (1, 2); is equivalent to a = 2; post-condition a==2