结构体、共用体和用户定义类型.ppt
《结构体、共用体和用户定义类型.ppt》由会员分享,可在线阅读,更多相关《结构体、共用体和用户定义类型.ppt(32页珍藏版)》请在三一办公上搜索。
1、第13章 复杂数据类型,本章要点理解结构体的含义、定义与使用方法理解共用体的含义、定义与使用方法理解枚举类型的含义、定义与使用方法理解typedef的作用与使用方法掌握链表操作的基本方法本章难点有关链表的操作用结构体变量和指向结构体的指针作函数参数,概述,有时,需将不同类型的数据组合成一个有机的整体,以便于引用。这些数据是相互联系的。如一个学生的有关信息:,可采用结构体数据结构描述上述信息。,13.1 结构体,例如:,struct studentint num;char name20;char sex;int age;char addr30;;,定义一个结构体类型的一般形式为:,struct
2、结构体名 成员表列;,对各成员都要进行类型说明;成员名定名规则与变量名同。,是类型,不是变量名,11.1.1 结构体类型的声明,声明的一般形式为:struct 结构名成员1的说明;成员2的说明;成员n的说明;,struct medicinechar code;/*药品代号*/char name;/*药品名称*/float price;/*单价*/char place;/*产地*/stuct goods caption;/*来源地*/;,11.1.2 结构体变量,方法一:先定义结构体类型再定义变量名struct studentint num;char name20;char sex;int ag
3、e;char addr30;;struct student student1,student2;,定义studet1和sudent2为struct student类型变量,不能只指定一个变量为“struct型”而不指定结构体名,有时,可用符号常量代表一个结构体类型,如:,#define STUDENT struct studentSTUDENTint num;char name20;char sex;int age;char addr30;,这样,可直接用STUDENT定义变量,如:STUDENT student1,student2;此时,不必再写关键字struct,方法二:在定义类型的同时定
4、义变量,如:,struct studentint num;char name20;char sex;int age;char addr30;student1,student2;,一般形式是:struct 结构体名 成员表列 变量名表列;,结构体变量的存储,struct testint m110;char m2;float m3;double m4;aa;,sizeof(struct test)的值为2*10+1+4+8=33,一个结构体变量所占用内存空间的字节数可以用sizeof运算符求出,它的一般形式为:,sizeof(变量名或类型标识符);,几点说明:,1.类型与变量是不同概念,不要混淆;
5、2.结构体中的成员,可以单独使用,其作 用与地位相当于普通变量;3.成员也可以是一个结构体变量;例如:,struct date int month;int day;int year;,Struct studentint num;char name20;int age;struct date birthday;student1,student2;,4.成员名可以与程序中的变量名相同,二者不代表同一对象。,11.1.3 结构体变量的引用与初始化,规则:1.不能将一个结构体变量作为一个整体进行赋值和输出;只能对其各个成员分别输出(引用形式为:结构体变量名.成员名)。printf(“.”,studen
6、t1);printf(“%d”,student1.num);输出 10010,错!,正确!,2.若成员本身又属一个结构体类型,只能对最低级的成员进行赋值或存取以及运算。如:student1.birthday.year(下页续),(接上片),3.对成员变量可以象普通变量一样进行各种运算,如:sumage=student1.age+student2.age;4.可以引用成员的地址,也可以引用结构体变量的地址,如 scanf(“%d”,错!,输入student1.num的值,输出student1的首地址,结构体变量的初始化,(一)对外部存储类型的结构体变量初始化:struct studentlong
7、 int num;char name20;char sex;char addr20;a=9801,”Wang hong”,W,”2 Linggong Road”;main()printf(“No.:%ldnname:%snsex:%cnaddress:%sn”,a.num,a.name,a.sex,a.addr);,运行结果为:No.:9801name:Wang hongsex:Waddress:2 Linggong Road,(二)对静态存储类型的结构体变量初始化,如:,main()static struct studentlong int num;char name20;char sex;
8、char addr20;a=9801,”Wang hong”,W,”2 Linggong Road”;printf(“No.:%ldnname:%snsex:%cnaddress:%sn”,a.num,a.name,a.sex,a.addr);,例题:设有三个候选人,每次输入一个得票的候选人的名字,要求最后输出各人得票结果。struct person char name20;int count;leader3=“Li”,0,”zhang”,0,”Liu”,0;main()int i,j;char leader_name20;for(i=1;i=10;i+)scanf(“%s”,leader_n
9、ame);for(j=0;j3;j+)if(strcmp(leader_name,leaderj.name)=0)leaderj.count+);for(i=0;i3;i+)printf(“%5s:%dn”,leaderi.name,leaderi.count);,11.1.5 结构体指针,定义格式为:struct 结构名结构体;struct 结构名 变量名1,变量名2,变量名n,*指针变量名1,*指针变量名2,*指针变量名n;指针变量名1=,1指向结构变量的指针变量,结构体变量的指针:是该结构体变量所占居的内存段的起始地址。例如:main()struct studentlong int nu
10、m;char name20;char sex;struct student stu_1;struct student*p;p=&stu_1;,stu.num=9901;strcpy(stu_1.name,”Li Min”);stu_1.sex=W;printf(“No.:%ldnname%snsex:%cn”,stu_1.num,stu_1.name,stu_1.sex);printf(“nNo.:%ldnname%snsex:%cn”,(*p).num,(*p).name,(*p).sex);,引用结构体成员的三种形式:结构体变量名.成员名(*p).成员名p-成员名,指向运算符。其优先级高于
11、自增、自减运算符,试分析以下运算:p-n 得到p指向的结构体变量中的成员n的值p-n+得到p指向的结构体变量中的成员n的值,用完后使它加1;+p-n 得到p指向的结构体变量中的成员n的值 使其先加1,2指针变量的引用,指向结构数组的指针变量,我们知道,数组和指针有密切的关系。同样,结构数组和结构数组指针也紧密相关。当定义一个结构数组后,我们还可以定义一个结构指针变量,使该指针变量指向这个数组。那么,程序中既可以利用数组下标访问一个数组元素,也可以通过指针变量的操作来存取结构数组元素。例如,定义一个结构类型worker和结构数组class:struct workerchar name20;flo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 结构 共用 用户 定义 类型
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-6015425.html