我正在编写一些用于从双向链表中删除节点的代码,我遇到了以下语法。虽然我能够理解语法是做什么但是不能得到top get下面的代码是怎么可能的代码
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
指针指向next node
是什么temp->next->prev
,从语法中我也可以理解prev pointer of the next node.
会使指针指向{ {1}}
但问题是如何评估这种语法?
答案 0 :(得分:6)
我认为您误解了->
运算符的作用。它不会使temp
指向任何不同的地方,它只是从第一个操作数所指向的结构中访问一个成员。
https://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B
语法从左到右计算,运算符优先级表示结构解除引用在赋值之前发生。所以第三行(例如)就是这样: -
((temp->next)->prev) = temp2;