技术问询: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
相关产品推荐
相关产品推荐

