【发布时间】:2018-01-20 18:09:28
【问题描述】:
link 表示条件表达式中的第二个和第三个操作数必须是兼容的类型。它还说第二个和第三个指针操作数之一可能是NULL。那么这是否意味着未评估的指针变为NULL?
示例:a == a? pointer1 : pointer2;
听说a == a 为真,所以pointer1 被评估,pointer2 未被评估。那么,是不是 pointer2 变成了 NULL。
【问题讨论】:
-
它并没有说指针会转向
NULL它说“指向兼容类型的指针(其中之一可能是NULL指针) " -
没有什么“变成空”。它只是说,如果你愿意,你可以写
NULL作为操作数之一。 -
test ? condition true : condition false是一个三元运算符。a == a将始终测试true,即使a = 0;(或NULL)所以结果将始终为pointer1。但是,a(和所有变量)必须在您尝试访问其值之前进行初始化。因此,如果您只是拥有int a; a == a ? pointer1 : pointer2;,您将调用 Undefined Behavior。
标签: c pointers conditional-operator