【发布时间】:2015-07-29 01:45:35
【问题描述】:
我有以下:
typedef struct Node_struct
{
int number;
Node *nextNode;
Node *prevNode;
} Node;
以后
Node *nodeInSet = lookup(set, number);
nodeInSet->nextNode = (Node *) malloc(sizeof(Node));
nodeInSet->nextNode->prevNode
最后一行是说:“表达式必须具有指向类的类型”。我看不出我的代码有什么问题。由于nodeInSet->nextNode 是Node *,我想我应该被允许写nodeInSet->nextNode->prevNode。什么在这里不工作?
【问题讨论】:
-
我还怀疑您使用了错误的编译器,否则Do not cast the return value from
malloc()。你可以这样写,但你真的不应该。从示例代码中无法说明为什么会发生错误,您可以发布可重现的示例吗?另外,nodeInSet->nextNode->prevNode不是nodeInSet吗?如果列表被正确填充。 -
在
Node_struct内部,typedef Node还没有定义,所以你应该声明struct Node_struct *nextNode -
一个结构定义不应该是 typedef'd。 typedef'ing 使代码混乱,导致误解,不增加任何价值,并使编译器名称空间混乱。而是总是使用:'struct Node_struct'
标签: c pointers dereference