为什么取消引用一个双指针时需要括号?

问题描述 投票:0回答:1

我有这个函数来删除单个链接列表中的第一个节点。

void removeFront(Node **tmpHead){       
if ((*tmpHead)->next == NULL)
    cout << "Single Node! RemoveFront() aborted!\n";'
else{
Node *oldNode = *tmpHead;
*tmpHead = oldNode->next;
delete oldNode;     
}

}

为什么我需要把 *tmpHead 在if语句的括号之间?如果我不这样做,就会给出一个编译错误。

c++ pointers dereference
1个回答
4
投票

由于 操作者优先, *tmpHead->next 解释为 *(tmpHead->next).

由于 tmpHead 属于 Node**, tmpHead->next 不是一个有效的子表达式。

这就是为什么你需要用括号来括住 *tmpHead 并使用 (*tmpHead)->next == NULL.

© www.soinside.com 2019 - 2024. All rights reserved.