关于结构体的一些思考
先看下面的一个例子:#include<stdio.h>
typedef struct student stu;
typedef struct book boo;
struct student{
int age;
boo b;
}
struct book{
char name[10];
}
main(){
......
}
运行程序会提示,在用结构体book之前必须先定义这个结构体。
如果把程序改写成下面的一种形式:
#include<stdio.h>
typedef struct student stu;
typedef struct book boo;
struct student{
int age;
boo *b;
}
struct book{
char name[10];
}
main(){
......
}
再次运行这个程序不再提示任何异常,唯一修改的地方由原先的结构体变量变成了指针变量;
以下是我个人分析的结果,有什么不对的地方,麻烦各位大神给指点指点,我是学习java的刚开始准备了解了解c语言:
1。c语言是面向过程的语言,在第一个程序中,当解析到boo b;这行代码时,他不知道该为这个结构体变量分配多大的存储空间,book这个结构体是在student结构体下面定义的,所以会抛出异常,如果用结构体的指针变量的话,就不一样了,在c语言中,指针变量的存储空间都是4个字节,当解析到book *b这句话时,编译器就可以为*p这个指针变量分配四个字节的空间,所以程序能够正常运行。
2。所以在用结构体实现链表的数据结构的时候,对自身结构体的引用都是靠指针变量来实现的,如:
struct student{
int age;
struct student *s;
}
由于是第一次在编程论坛上发帖,有什么不足的地方还望各位大神不吝赐教,我的QQ号:2621933104 有兴趣一起学习交流c语言的可以加这个QQ号,期待你的加入,谢谢!