当我们尝试在结构体A中定义一个A类型的成员时(比如链表),如果像下面一样编写代码,是无法通过编译的。
struct A{
int x;
struct A a;
}
正确的方式应该是用指针来实现,如下
struct A{
int x;
struct A *a;
}
比较直观的解释是,如果像第一种写法,是无法确定结构体A类型所占内存的大小的,当我们定义一个结构体变量,首先做的就是为其分配内存空间,如果连其大小都不确定,程序自然就无法执行。
第一种写法中,结构体A具有两个成员,很明显第一个成员x占4字节(不同系统有所差异),但第二个成员a的大小就无法确定了。因此需要用指针来改写,指针的大小是确定的。