gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 19:53:17 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com