【问题标题】:Order of evaluation of pointer dereference operator指针解引用运算符的求值顺序
【发布时间】:2015-09-13 02:34:42
【问题描述】:

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

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.

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

【问题讨论】:

  • temp->next == (*temp).next,这就是你要找的吗?这个问题我好像没看懂

标签: c pointers struct dereference


【解决方案1】:

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

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

语法从左到右计算,运算符优先级意味着结构取消引用发生在赋值之前。所以第三行(例如)真的是这样的:-

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

【讨论】:

  • 好的,同意-> 操作符由 some struct temp->next 类型的指针使用,获取下一个节点 rt 的头部的值,所以这个表达式不是分解为(头部的值下一个节点的)->prev 我在这里遗漏了什么吗?
猜你喜欢
  • 2011-05-14
  • 2010-11-29
  • 2011-11-03
  • 2021-08-23
  • 2021-07-12
  • 2010-12-27
  • 2021-06-08
  • 1970-01-01
  • 2014-12-11
相关资源
最近更新 更多