如何级联 - >运营商?

时间:2015-05-17 14:59:20

标签: c pointers dereference

我有以下内容:

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->nextNodeNode *,我认为应该允许我写nodeInSet->nextNode->prevNode。什么在这里不起作用?

2 个答案:

答案 0 :(得分:6)

prevNodenextNode成员的类型不完整,您必须像这样写

typedef struct Node_struct
{
    int number;
    struct Node_struct *nextNode;
    struct Node_struct *prevNode;
} Node;

typedef struct Node_struct Node;
struct Node_struct
{
    int number;
    Node *nextNode;
    Node *prevNode;
};

原因是您可以将poniter声明为不完整的类型,但是如果您尝试取消引用指针,就像使用->运算符一样,那么必须知道类型,因为需要类型。

答案 1 :(得分:3)

您可以将代码更改为此。

typedef struct Node_struct
{
    int number;
    struct Node_struct *nextNode;
    struct Node_struct *prevNode;
} Node;