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;
声明
答案 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
。此处a
为10
,因此结果为address of b
。
然后它被解除引用意味着该地址的值意味着b
的值,即11
。
然后这个a?b:c
。测试 - 如果a
是non-zero
,那么b
其他c
。由于a
为non-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
分配给自己。