理解条件运算符

时间:2015-08-17 16:18:04

标签: c

int main()
{
    int a=10,b=11,c=13;
    *((a)?&b:&c)=a?b:c;
    printf("%d %d %d ,"a,b,c);
    return 0;
}

我不理解*((a)?&b:&c)=a?b:c;声明

的输出

3 个答案:

答案 0 :(得分:2)

让我们理解这个怪物:

*((a)?&b:&c)=a?b:c;

采取第一个评估部分: (a)?&b:&c:只是表示如果a不为零,则获取b的地址,否则获取c的地址。

第二个评估部分:

*(...)将地址取消引用到实际值。在这种情况下,评估结果为*&b b *&的倒数。)

右侧a?b:c评估为b(就像在左侧一样)。

即。你刚刚写下了b = b;)

答案 1 :(得分:2)

*((a)?&b:&c)=a?b:c; 

在第一个*((a)?&b:&c)

如果a为非零,则address of b为其他address of c。此处a10,因此结果为address of b

然后它被解除引用意味着该地址的值意味着b的值,即11

然后这个a?b:c。测试 - 如果anon-zero,那么b其他c。由于anon-zero,因此结果为b

最后我们得到的是

   b=b; 

答案 2 :(得分:1)

将其分解为部分:

*((a)?&b:&c)  =  a?b:c;

我们正在分配一个值。什么' a?b:c?由于a为真,a?b:c的评估结果为b,即11

现在让我们来看看我们分配的内容:

(a)?&b:&c

由于a为真,所以选择&b,地址为b。所以我们有

*&b = b;

因此,我们只需将b分配给自己。