c-为什么逗号运算符的工作方式有变化



考虑以下代码片段案例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

相关内容

  • 没有找到相关文章