当我们进行如下声明
char str[];
这就是一个不完全类型,它可以通过多次声明形成完全类型
...
.
.
char str[];
.
.
char str[10];
...
当编译器读到第一个声明时,认定为不类型,如果碰到第二个声明则形成完全类型,如果没有第二个声明,编译器就会报错,因为无法为其分配内存空间。
不全完结构体
struct t{
struct p *ps;
};
struct p{
struct t *ts;
};
这样是可以被编译器正确识别的,因为指针类型都为四个字节,所以相应的指针都为完全类型
而
struct t{
struct p ps;
};
struct p{
struct t ts;
};
则是错误的。
不完全结构体类型被广泛应用于数据结构中,如链表
struct listlink{
Elem data;
struct listlink *next;
};