链表的结构如何知道其自身类型的下一个指针的类型?

时间:2015-03-16 07:37:26

标签: c struct linked-list

struct node
{
    int     data;
    node*   pointerToNextNode;
};

这里pointerToNextNodestruct node的类型,它在结构中声明。 结构如何知道自己类型的下一个指针的类型 - 当它本身尚未形成时?

没有使用关键字extern。这是如何工作的?

3 个答案:

答案 0 :(得分:2)

它不需要知道结构,它足以知道类型名称,即struct node - 并且已经定义了。

您可以通过转发类型声明获得相同的结果:

struct node;            // declare the struct not defining it
struct node *pointer;   // declare variable

void foo()
{
    if(pointer != NULL)        // OK, we use the pointer only
        if(pointer->x == 0)    // invalid use - struct contents unknown yet
            return;
}

struct node {           // supply a definition
    int x;
};

void bar()
{
    if(pointer != NULL)
        if(pointer->x == 0)    // OK - struct contents already known
            return;
}

答案 1 :(得分:1)

  

此处pointerToNextNodestruct node

的类型

不,不是。它的类型为struct node *

struct node* pointerToNextNode;为类型为struct node指针变量分配内存。
它没有为struct node分配内存,因此,直到它,它不需要知道struct node的大小和表示。只有(数据)类型名称就足够了。

另外,值得一提的是,如果没有typedefnode* pointerToNextNode;不应该有效。它应该写成如下

typedef struct node node; 

struct node 
{ 
    int data; 
    node* pointerToNextNode; 
};

顺便说一句,private:不是C,如果我没错。

答案 2 :(得分:1)

对我来说这不能用CC编译 - 正是因为你所说的。 你必须使用struct node *让编译器知道你想要指针的内存