c - 使用条件运算符时变量值如何变化?

标签 c pointers ternary-operator conditional-operator

任何人都可以帮我解释上面代码的输出.. 它将在不同的编译器中打印不同的输出。哪个 一个要考虑的。

代码

#include<stdio.h>

int main()
{
    int a=0, b=1, c=2;
    *((a+1 == 1) ? &b : &a) = a ? b : c;
    printf("%d, %d, %d\n", a, b, c);
    return 0;
}

输出

0,2,2

此输出来自 Codeblocks

最佳答案

你的代码等同于:

int* ptr;

if (a + 1 == 1)   // which is true
{
    ptr = &b;     // So ptr points to b
}
else
{
    ptr = &a;
}

if (a != 0)       // which is false
{
    *ptr = b;    
}
else
{
    *ptr = c;      // so *ptr (which is same as b) is set equal to c
}

那么发生的是 b=c;

关于c - 使用条件运算符时变量值如何变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38497412/

相关文章:

c - C中存储字符串的指针数组

c++ - C++11 中 "auto var = {condition} ? 1 : 1.0"的类型是什么?它是 double 还是整数?

c - 结构上的指针不能复制到函数内的另一个指针

c - 如何使用 GDB 修改内存内容?

c - 删除链表头后出现垃圾打印

c - 如何在c中将一个十六进制字符串与另一个十六进制字符串异或

ios - 通过函数初始化实例变量

c# - 为什么必须在三元表达式中强制转换int类型?

c++ - 三元运算符的漂亮程度与if语句的比较

c - 2 结构在 C 中使用 1 个指针