c - 指针取消引用运算符的评估顺序

标签 c pointers struct dereference

我正在编写一些用于从双向链表中删除节点的代码,我遇到了以下语法。虽然我能够理解语法在做什么,但无法理解下面的代码怎么可能

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/

相关文章:

function - Golang 包结构返回缓冲区

c - 如何检查可执行文件是否以管理员身份运行?

C 结构节点

c - 使用 memcpy 会导致内存覆盖为 NULL

c - 在 C 的 for 循环中输入二维数组中的值

c# - 不可变类与结构

c - ZooKeeper C 绑定(bind)安装

c++ - C++ Graph类指针困惑

c++ - 将指针分配给 C++ 中的指针

c - 如何根据字符串的值访问 `struct' 的成员?