不行,因为结构体中的各个成员所需的存储空间大小是编译的时候确定的,在结构体定义中如果定义自身类型的成员,因为此时结构体大小还不确定,所以此时定义的成员所需的存储空间大小就不确定,因此编译不会通过。
但是可以定义成自身类型的指针,因为指针所需的存储空间大小是可以确定的。
比如:
struct test {
struct test *pt; /* pt是指针,指针占用空间已经确定,因此可以 */
struct test t; /* 在结构体还没定义完之前,编译器不知道该类型所需多大空间,
所以在这里会出错 */
};
更多知识:C结构体向前声明一种用法