gpt4 book ai didi

c - 为什么逗号运算符的工作方式会有所不同?

转载 作者:太空狗 更新时间:2023-10-29 14:56:05 25 4
gpt4 key购买 nike

考虑以下代码片段案例一:

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,而没有使用泛神论者我得到的输出是 hellojoke5。

根据我尝试使用三元运算符时的输出,然后使用圆括号或不使用圆括号执行相同的表达式时,返回 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

关于c - 为什么逗号运算符的工作方式会有所不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28691143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com