【问题标题】:Make c++ interpret a pointer to NULL as zero使c ++将指向NULL的指针解释为零
【发布时间】:2017-05-06 14:25:41
【问题描述】:

我有这种代码

two->height   = max(two->right->height, two->left->height);

two->right 或 two->left 之一可以是指向 null 的指针,因此程序将 seg fault 。我正在寻找,如果 two->left 为 null,它将被转换为零,因此 two->right 将自动为 true。

有什么技巧可以解决这个问题吗?

【问题讨论】:

  • 有点不清楚问题是什么,但nullptr 没有整数类型,无法转换为整数。
  • @RawN 我很确定 OP 不想将 two->left 视为零,如果 two->left 是空指针,则 OP 想要将 two->left->height 视为零。跨度>

标签: c++ pointers null


【解决方案1】:

这也可以:

two->height   =       max(
                         ( two->right != nullptr ? two->right->height : 0 ),
                         ( two->left  != nullptr ? two->left->height  : 0 )
                         );

【讨论】:

  • 加上== nullptr 颠倒了意思,完全打破了它
  • NULL 在 c 中为 null 而 nullptr 在 c++ 中为 null ?
  • @ItsYou 没有。有0NULLnullptrnullptr 的类型为 std::nullptr_t。在 C++ 中,您应该更喜欢 nullptr 而不是 NULL0
  • @ItsYou:基本上,是的。
【解决方案2】:

您首先要检查左右指针,看看它们是否为空。大致如下:

if(two->right == NULL) {
    ...
}
else if(two->left == NULL) {
    ...
}
else {
    two->height = max(two->right->height, two->left->height);
}

有很多方法可以处理为 NULL 的指针。我只是选择了一个简单的例子。

【讨论】:

  • 这是一种非常冗长的方法,并且会导致大量代码重复。 OP 专门寻找富有表现力的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
相关资源
最近更新 更多