学习结构体时的课后例题之嵌套问题

最近遇到这个问题:下面的结构体类型的声明是否合法?在声明一个结构体类型的时候,其内部可不可以嵌套这个结构体自身呢?即可不可以用与自身结构体类型相同的结构体作为其成员呢?请说明原因。

struct  sample
{
  int data;
  struct sample next;
};

        这种声明是错误的,因为这种声明实际上是一个无限循环,成员next是一个结构体,next的内部还会有成员是结构体,依次下去,无线循环。在分配内存的时候,由于无限嵌套,也无法确定这个结构体的长度,所以这种方式是非法的。

正确的方式: (使用指针)

struct sample{
struct sample *next;
int date;
};