C语言结构体复习

来源:互联网 发布:php有线程吗? 编辑:程序博客网 时间:2024/05/17 06:38

一、发明结构体的初衷

人们发现很多不同的数据类型之间不是互相独立的而是互相关联的,比如一位学生的姓名、学号、成绩等数据。显然,把这些数据放在一起管理起来会轻松不少,但数组满足不了这个需求,因为数组只能存放同一类型的数据,所以就出现了结构体,千万不要忘了最后的分号。


struct Student{    char name[20];    int num;    int score[5];};

经过上面的指定,struct Student就是一个在本程序中可以使用的合法类型名,将Student称为结构体标记以区分不同的结构体类型。它和系统提供的标准类型int、char、float、double等具有类似的作用,都可以用来定义变量。.

格式如下:struct Student student_1;


二、结构体变量的引用

格式如下:结构体变量名.成员名

“.”是成员运算符,拥有最高运算优先级。如果成员本身又属于一个结构体类型,则要用成员运算符逐级找到最低一级的成员。

student_1和student_1.num都是变量名,与一般数据类型定义的变量没有差异。&student_1输出的是这个结构体变量在内存中的首地址,&student_1.num输出的是成员变量num在内存中的地址。


三、结构体指针

指向结构体对象的指针变量既可指向结构体变量,也可指向结构体数组中的元素。指针变量的基类型必须与结构体变量的类型相同。

例如:struct Student *pt;   //pt可以指向struct Student类型的变量或数组元素。

(*p).num与student_1.num与p->num等效,*p等价于student_1,->是指向运算符


四、指向结构体数组的指针

一定要注意,结构体数组相当于普通的一维数组,不存在一级指针、二级指针这样的分别。在应用指针时,只要把结构体数组类比于一维数组即可。

在上文已经提到*p等价于student_1,在结构体数组当中p[i]等价于*p。

关键还是在于通过(*p),p[i]将其效果等价到student_1这里,那么应用起来就得心应手了。现在看来[ ]跟在汇编语言中一样具有寻址的功能,当然这只是一个比喻。