结构内部的结构,结构的嵌套

时间:2013-06-07 08:57:07

标签: c structure

我有

   struct node
   {
        int value;
       struct node next;
   };

如果我这样做,我会收到错误field next has incomplete type

但是当我宣布这样的结构时,它工作正常,

     struct node
     {
         int value;
         struct node *next;
     };

为什么会出错?编译器可以知道已经声明了struct节点。

4 个答案:

答案 0 :(得分:1)

你只能这样做

struct node
{
  int value;
  struct node *next;
};

此致 卢卡

答案 1 :(得分:1)

我不确定是否有人真正回答了你的问题。

由于某些原因,您无法使用结构本身。首先,你现在已经使结构自我引用,并且没有办法为它实际分配足够的空间。每次你试图分配它时,它都包含一个本身,而它本身又包含一个本身,而这个本身又包含一个......永远。所以需要无限的记忆。其次,编译器还不知道它对于那种类型的结构意味着什么,因为它还没有完成。

但是,编译器确实知道指向该结构的指针将占用多少空间 - 它与指向任何其他类型的指针相同。

此外,由于未分配结构本身的内存 - 只是指针 - 没有无限递归。

由于没有通过添加指针进行解引用,因此您不必具有结构的完整定义,以便知道访问结构成员的内存偏移量。这必须等到结构完全定义。

答案 2 :(得分:0)

struct node
{
   int value;
   struct node *next;
};

这段代码没问题。你只能把指针放到结构

答案 3 :(得分:0)

您可以为不使用struct关键字添加typedef,并且需要一个指针。

typedef struct node node;

struct node
{
   int value;
   node *next;
};