在我用 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/