最近遇到这个问题:下面的结构体类型的声明是否合法?在声明一个结构体类型的时候,其内部可不可以嵌套这个结构体自身呢?即可不可以用与自身结构体类型相同的结构体作为其成员呢?请说明原因。
struct sample
{
int data;
struct sample next;
};
这种声明是错误的,因为这种声明实际上是一个无限循环,成员next是一个结构体,next的内部还会有成员是结构体,依次下去,无线循环。在分配内存的时候,由于无限嵌套,也无法确定这个结构体的长度,所以这种方式是非法的。
正确的方式: (使用指针)
struct sample{
struct sample *next;
int date;
};