计算机二级C语言结构体要点

上传人:博****1 文档编号:482633554 上传时间:2024-02-19 格式:DOC 页数:14 大小:41KB
返回 下载 相关 举报
计算机二级C语言结构体要点_第1页
第1页 / 共14页
计算机二级C语言结构体要点_第2页
第2页 / 共14页
计算机二级C语言结构体要点_第3页
第3页 / 共14页
计算机二级C语言结构体要点_第4页
第4页 / 共14页
计算机二级C语言结构体要点_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《计算机二级C语言结构体要点》由会员分享,可在线阅读,更多相关《计算机二级C语言结构体要点(14页珍藏版)》请在金锄头文库上搜索。

1、结构体与共用体要点一、概述结构体(structure)是一种数据类型,它把互相联系的数据组合成一个整体。把不同类型的数据组合成一个有机的整体,可以用结构体解决。结构体中的每一项数据,称为结构体“成员”(member)或“分量”。声明结构体类型的一般形式:struct 结构体名 成员表列;声明各成员的形式:类型名 成员名;例如:学生数据struct studentint num; char name20; char sex; int age; float score; char addr30; 注意不要忽略最后的分号student结构体类型占59个字节。二、定义结构体类型变量的方法1先声明结构体

2、类型再定义变量名 struct student student1, student2;要求指定为某一特定的结构体类型2在声明类型的同时定义变量struct 结构体名成员表列变量名表列;例如:struct studentint num; char name20; char sex; int age; float score; char addr30; student1, student2;3直接定义结构体类型变量struct 成员表列变量名表列;几点说明:(1)类型与变量是不同的概念;(2)结构体中的成员可单独使用,其作用与地位相当于普通变量;(3)成员也可以是一个结构体变量;(4)成员名与普通

3、变量名相同,不代表同一对象。三、结构体变量的引用(1)不能将结构体变量整体进行输入和输出,只能对各个成员分别进行输入和输出。printf(%d,%s,%c,%d,%f,%sn,student1);错误(2)引用成员的方式:结构体变量名.成员名student1.num=10010;student1.birthday.month=3;(若干个成员运算符)当成员是另一个结构体变量时,应一级一级地引用成员。仅在以下两种情况下,可以把结构体变量作为一个整体来访问。(1) 结构体变量整体赋值例、student2 = student1;(2)取结构体变量地址例、printf(%x, &student1);

4、/*输出student1的地址 */四、结构体变量的初始化struct studentlong int num; /* 学号 */ char name20; /* 姓名 */ char sex; /* 性别 */ char addr20; /* 地址 */ a = 89031, Li Lin, M, 123 Beijing Road; 注意:不能在结构体内赋初值。例、下面程序错误struct student long int num = 89031; char name20 = Li Lin; char sex = M; char addr30 = 123 Bejing Road; a;五、结

5、构体数组每个数组元素都是一个结构体类型数据1定义结构体数组和定义结构体变量的方法相仿(三种方法)2结构体数组的初始化在定义数组的后面加上:=初始表列;struct student int num; char name20; char sex; int age; float score; char addr30; stu3 = 10101,Li Lin, M, 18, 87.5, 103 Bejing Road, 10102,Zhang Fun,M, 19, 99, 130 Shanghai Roaad, 10104,Wang Min, F, 20, 78.5, 1010 Zhongshan R

6、oad ;六、指向结构体类型数据的指针结构体变量的指针:就是该变量所占据的内存段的起始地址。1指向结构体变量的指针(*p).num表示:p指向的结构体变量中的成员num成员运算符“.”优先于“*”运算符,不能写成*p.num*(p.num)三种表示形式:(1)构体变量名. 成员名(2)(*p).成员名 该方式用得很少(3)p-成员名2指向结构体数组的指针注意:(1)p=stu;,则p+指向stu1(2)运算符“-”优先于“+”运算符+p-num:使p所指向的num成员值加1(+p)-num:先使p+1,然后得到它指向的元素中的num成员值例:有4个学生,每个学生包括学号、姓名和成绩。要求找出成

7、绩最高者的姓名和成绩。#include stdio.hvoid main() struct student int num; /* 学号 */char name20; /* 姓名*/float score; /* 成绩 */;struct student stu4; /* 4个学生 */struct student *p;int i;int temp = 0; /*成绩最高学生在数组中的序号,03 */ float max; /* 最高成绩 */for(i=0; i4; i+) /* 输入4个学生的学号、姓名、成绩 */scanf(%d %s %f, &stui.num, stui.name,

8、 &stui.score); for(max=stu0.score, i=1; i max)max = stui.score;temp = i; p = stu + temp; /* p指向成绩最高的学生结构 */printf(nThe maximum score:n);printf(No.: %dn name: %sn score: %4.1fn,p-num, p-name, p-score); 3、结构体变量、指向结构体的指针均可作为函数参数例:有一个结构体变量stu,内含学生学号、姓名和三门课程的成绩。要求在main中赋以值,在函数print中打印输出。#include stdio.h#

9、include string.h#define format %dn %sn %fn %fn %fnstruct student int num; /*学号 */char name20; /* 姓名*/float score3; /* 三门课程的成绩 */; void print(struct student *p); /*print函数原型声明 */void main()struct student stu;stu.num = 12345;strcpy(stu.name, Li Li); stu.score0 = 67.5;stu.score1 = 89;stu.score2 = 78.6;

10、 print(&stu); /*如果stu是结构体数组,则不要&符号*/ void print(struct student *p) /*print函数定义 */printf(format, p-num, p-name, p-score0, p-score1, p-score2); printf(n); (1)结构体的成员作函数的参数。与普通变量作函数参数的用法相同。值传送,不能修改实参的值。(2)结构体指针作函数的参数。将结构体的地址传送给函数,效率高,可以修改实参的值。(3)结构体作函数的参数。将结构体的全部成员值传送给函数,效率低,不能修改实参的值。例:#includestruct ST

11、Uchar name10; int num;void f(char *name,int num)struct STU s2=SunDan,2004,Penghua,20045; num=s0.num; strcpy(name,s0.name);main()struct STU s2=YangSan,20041,LiSiGuo,20042,*p; p=&s1; f(p-name,p-num);前一个参数的地址,后一个是数值 printf(%s %dn,p-name,p-num); getch();运行结果:SunDan 20042前一个随子函数变化,后一个不变仍是主函数中的值。七、用指针处理链表

12、(一定要学会画图)1链表概述链表:动态地进行存储分配的一种结构,它动态地进行存储分配。数组:存放不同班级的学生数据,数组定得足够大,浪费内存。数组必须事先定义固定的长度(元素个数),不能适应数据动态地增减的情况。当数据增加时,可能超出原先定义的元素个数;当数据减少时,造成内存浪费。链表动态地进行存储分配,可以适应数据动态地增减的情况,且可以方便地插入、删除数据项。(数组中插入、删除数据项时,需要移动其它数据项)。链表有单向链表、双向链表、环形链表等形式。结点:链表中的每一个元素,包括两部分用户需要的实际数据下一个结点的地址 head AB C D NULL head指向第一个元素,第一个元素又

13、指向第二个元素,直到最后一个元素,该元素不再指向其它元素。表尾:地址部分放一个“NULL”(表示空地址)结点应为结构体类型,一个结点中应包含一个指针变量,用它存放下一个结点的地址。例:struct studentint num; float score; struct student next;/*next指向struct student类型数据*/;student链表2简单链表所有结点都是在程序中定义的,不是临时开辟的,是“静态链表”3处理动态链表所需的函数(1)malloc(size)作用:在内存的动态存储区中。函数返回值:该分配域的起始地址。不成功,则返回NULL。(2)calloc(n,size)分配n个长度为size的连续空间(3)free(p)释放由p指向的内存区。函数无返回值。4建立动态链表 即从无到有,一个一个地开辟结点和输入各结点数据,并建立起前后相链的关系。例、写一函数建立一个有3名学生数据的单向动态链表过程:开辟单元输入数据加入链表head:头指针

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 机械/制造/汽车 > 汽车技术

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号