0 c struct pointers dereference
我正在编写一些用于从双向链表中删除节点的代码,我遇到了以下语法.虽然我能够理解语法正在做什么但是不能得到top get下面的代码如何可能
struct dll{
int data;
struct dll *next;
struct dll *prev;
};
Run Code Online (Sandbox Code Playgroud)
并且在某些功能中有这种语法
else{
temp2=temp->prev;
temp2->next=temp->next;
temp->next->prev=temp2;
free(temp);
}
Run Code Online (Sandbox Code Playgroud)
我知道temp->next它使temp指针指向的是什么next node,从语法中我也可以理解,temp->next->prev这会使指针指向prev pointer of the next node.
但问题是如何评估这种语法?
我认为你误解了->操作员的行为.它没有temp任何意义,它只是从第一个操作数指向的结构访问一个成员.
https://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B
语法从左到右计算,运算符优先级表示结构解除引用在赋值之前发生.所以第三行(例如)就是这样: -
((temp->next)->prev) = temp2;
Run Code Online (Sandbox Code Playgroud)