我正在编写一些用于从双向链表中删除节点的代码,我遇到了以下语法。虽然我能够理解语法在做什么,但无法理解下面的代码怎么可能
struct dll{
int data;
struct dll *next;
struct dll *prev;
};
在某些函数中有这样的语法
else{
temp2=temp->prev;
temp2->next=temp->next;
temp->next->prev=temp2;
free(temp);
}
我知道 temp->next
是什么使 temp
指针指向 下一个节点
并且从语法中我也可以理解temp->next->prev
会让指针指向下一个节点的prev 指针。
但问题是如何评估这种语法?
最佳答案
我认为您误解了 ->
运算符的作用。它不会使 temp
指向任何不同的地方,它只是从第一个操作数指向的结构中访问一个成员。
https://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B
语法是从左到右计算的,运算符优先级意味着结构解引用发生在赋值之前。所以第三行(例如)实际上是这样的:-
((temp->next)->prev) = temp2;
关于c - 指针取消引用运算符的评估顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31068093/