指针解引用算子的评估顺序

时间:2015-06-26 08:06:34

标签: c pointers struct dereference

我正在编写一些用于从双向链表中删除节点的代码,我遇到了以下语法。虽然我能够理解语法是做什么但是不能得到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}}

但问题是如何评估这种语法?

1 个答案:

答案 0 :(得分:6)

我认为您误解了->运算符的作用。它不会使temp指向任何不同的地方,它只是从第一个操作数所指向的结构中访问一个成员。

https://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B

语法从左到右计算,运算符优先级表示结构解除引用在赋值之前发生。所以第三行(例如)就是这样: -

((temp->next)->prev) = temp2;