You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

技术问询:while(指针)与if(指针)的含义及代码中指针入括号的原因

关于C++指针在while/if条件中的用法解析

在C里,把指针直接放在while或if的条件括号内,本质是判断该指针是否为空(nullptr)。C会自动将指针隐式转换为布尔值:

  • 非空指针(指向有效内存的地址)会被转为true
  • 空指针(不指向任何有效内存)会被转为false

结合代码示例分析

1. while(currentNode)的作用

看这段链表销毁的代码:

Node* currentNode = head;
while (currentNode) {
   Node* toBeDeleted = currentNode;
   currentNode = currentNode->next;
   delete toBeDeleted;
   ......
}

这里while(currentNode)的逻辑是:只要currentNode还指向一个有效的节点,就继续执行循环。

链表的最后一个节点的next成员是nullptr,当循环执行到处理最后一个节点时,currentNode = currentNode->next会把currentNode设为空指针,下一次循环判断时,while(nullptr)等价于while(false),循环就会终止。这样能避免访问空指针导致的程序崩溃,同时确保链表的所有节点都被遍历销毁。

2. if(successor)的作用

再看这段链表节点删除的代码:

Node* successor = currentNode->next;
Node* predecessor = currentNode->previous;

if (successor) {
   successor->previous = predecessor;
   ....
}

这里if(successor)是为了判断currentNode是不是链表的最后一个节点:

  • 如果currentNode不是最后一个节点,successor指向它的下一个有效节点,条件为true,执行successor->previous = predecessor来维护链表的双向指针关系;
  • 如果currentNode是最后一个节点,successor就是空指针,条件为false,跳过这段代码,避免因为访问nullptr->previous而触发未定义行为(比如程序崩溃)。

内容的提问来源于stack exchange,提问作者jun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 00:01:12