【问题标题】:Does the unevaluated pointer in a conditional expression, turns void?条件表达式中未计算的指针是否变为无效?
【发布时间】: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


【解决方案1】:

这是否意味着未计算的指针变为 NULL?

不,它解释了第二个和第三个操作数可以具有不同类型的异常。其中之一可以是NULL

int * pointer = (1 == 1) ? NULL : &intvar;

int * pointer = (1 == 1) ? &intvar : NULL;

因为其中一个是int*,第二个是void*


你认为在这种情况下

int * pointer = (1 == 1) ? &intvar1 : &intvar2;

变量intvar2 变成NULL,但事实并非如此。唯一被修改的变量是pointer,并且指向变量intvar1

【讨论】:

    猜你喜欢
    • 2012-07-21
    • 2018-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-19
    • 2018-11-05
    • 2015-10-17
    • 2013-12-23
    相关资源
    最近更新 更多