c - 在c中使用运算符 '->'的奇怪副作用

标签 c pointers linked-list side-effects

在我用 C 编写的代码中使用运算符“->”时,我遇到了这个奇怪的副作用。我在 -> 上使用的指针被更改为有一些垃圾。

更具体地说:

我有以下结构:

typedef void* ListElement ;

typedef  struct List_t* List ;

typedef struct Node_t* Node;

Struct Node_t {
  ListElement data ;
  Node next;
}

Struct List_t {
  Node* head;
  Node* current
}

当我使用以下ListGetFirst()时,我得到有线行为:

ListElement ListGetFirst(List list)
{
  if( list == NULL || list->head==NULL)
  {
    return NULL;
  }
  list->current=list->head;
  Node* head =list->head; // here is the problem
  ListElement data = (*head)->data;
  return data;
}

当我使用调试器时,我发现指针 list->head 在标记的上述行上发生了更改。

我真的不知道为什么,而且我不知道“->”会产生副作用

提前致谢

最佳答案

您确定这正是您想要做的吗?

typedef struct Node_t* Node;

Node* head =list->head; 

既然你将 Node 定义为指向 Node_t 的指针,你不应该这样做吗:

Node head =list->head; 

编辑:

总而言之,我认为这个 typedef 误导了你:

typedef struct Node_t* Node;

如果简单地说,那就更有意义了:

typedef struct Node_t Node;

关于c - 在c中使用运算符 '->'的奇怪副作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5749445/

相关文章:

C 对按位移位操作感到困惑

c - 为什么我的输出是 0?不应该是40吗?

即使分配了内存,修改链表的 C 程序也会导致段错误

java - 给定链表的成对交换元素(Java解决方案)

c++ - 无法从 'Node<T> *' 推断出 'int' 的模板参数

c - 将条件运行到条件的真实语句中

c - C语言中的二进制文件io

c 指向结构的自由指针

pointers - 不了解如何在 Rust 中访问向量的元素

c++ 指向函数的指针没有改变