【发布时间】:2011-08-10 14:29:37
【问题描述】:
在我用 C 编写的代码中使用运算符 '->' 时,我得到了这个奇怪的副作用。我使用 -> on 的指针被更改为有一些垃圾。
更具体地说:
我有以下结构:
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 在标记的上述行上发生了变化。
我真的不知道为什么,我也不知道'->'会有副作用
提前致谢
【问题讨论】:
-
您很可能误解了正在发生的事情。
-
不,-> 在 C 中没有副作用。为什么不直接做
return list->head->data? -
这是您的代码,而不是
->的“副作用”。这是肯定的。 -
@meagar - 如果这是我的代码,请帮我找到答案,我很绝望
-
您不应该使用隐藏类型是指针这一事实的 typedef。我们都对此感到困惑!
标签: c pointers linked-list side-effects