不完全类型指“函数之外、类型的大小不能被确定的类型”
总结一下,C的类型分为:
- 对象类型(char、int、数组、指针、结构体等)
- 函数类型
- 不完全类型
结构体的声明就是一个不完全类型的典型例子。
struct Woman_tag;
struct Man_tag {
....
struct Woman_tag *wife;
....
};
struct Woman_tag {
....
int age;
....
};
这样是没问题的。
如果将Man_tag结构中的struct Woman_tag *wife换成struct Woman_tag wife,由于Woman_tag在Man_tag之后定义,所以Man_tag只获知了Woman_tag的声明,只知道有这个“人”,但还未见过她,不知道长什么样,所以在内存中画不出她的模样。
在C标准中,void类型也被归类为不完全类型。