结构体、联合体与枚举类型.ppt
《结构体、联合体与枚举类型.ppt》由会员分享,可在线阅读,更多相关《结构体、联合体与枚举类型.ppt(61页珍藏版)》请在三一办公上搜索。
1、第11章结构体、联合体与枚举类型,结构体类型是C语言允许用户定义的又一重要的构造数据类型。,11.1 结构体的概念11.2 结构体数组11.3 结构体指针11.4 链 表11.5 联合体数据类型11.6 枚举数据类型11.7 自定义类型,11.1 结构体的概念 结构体类型是一种构造数据类型,是数目固定,类型不同的若干有序数据项的集合。每个数据项称为一个成员。每一个成员可以是一个基本数据类型或者是一个构造类型。结构体数据类型具有很强的数据描述能力,但C语言中并不提供现成的结构体类型。因此,用户在使用一个结构体类型之前,必须先定义它,也就是要在程序中构造所需要的数据类型。,11.1.1 结构体类型
2、的定义结构体类型定义的一般形式为:struct 结构体类型名 类型标识符 成员名1;类型标识符 成员名2;类型标识符 成员名n;;,例如,定义一个“学生信息”的结构体类型如下:struct student int num;char name10;char sex;int age;char addr50;int score;,11.1.2 结构体变量的定义、引用、初始化1结构体变量的定义(1)先定义结构体类型,再定义结构体类型变量。这种定义的一般形式为:struct 结构体类型名 结构体变量名表;如上面定义了“学生信息”的结构体类型struct student后,就可以用它来定义结构体变量。,例
3、如:struct student stul,stu2;定义了stul和stu2为struct student类型的变量,编译系统为变量 stul与stu2分配存储空间时,其存储格式与结构体类型struct student所描述的保持一致,结构体中的各个成员按要求顺序存放。每一个struct student类型的变量占用的存储单元为67个字节。,(2)在定义结构体类型的同时定义结构体变量。这种定义的一般形式为:struct 结构体类型名 类型标识符 成员名1;类型标识符 成员名2;类型标识符 成员名n;结构体变量名表;,例如:struct student int num;char name10;
4、char sex;int age;char addr50;int score;stu1,stu2;这种定义与前面的定义功能相同,都是既定义了结构体类型struct student,又定义了两个结构体变量stu1与stu2。,(3)直接定义结构体类型的变量。其一般形式为:struct 类型标识符 成员名1;类型标识符 成员名2;类型标识符 成员名n;结构体变量名表;,例如:struct int num;char name10;char sex;int age;char addr50;int score;stu1,stu2;,2结构体变量的引用结构体成员引用的一般形式如下:结构变量名.成员名 其中
5、“.”为结构体成员运算符,所有C语言运算符中它的优先级最高,因此可以把上述引用形式作为一个整体来看待。例如,stu1.name、stu2.score分别表示结构体变量stu1的成员name与结构体变量stu2的成员score。,例11.1 定义有关职工工资信息的结构体类型变量(包括编号、姓名、基本工资、附加工资、水电费、实发工资),为结构体变量中的成员赋值并输出其值。struct person int num;/*职工编号*/char*name;/*姓名*/float base;/*基本工资*/float addition;/*附加工资*/float cost;/*水电费*/float sal
6、ary;/*实发工资*/;main()struct person employeea,employeeb;employeea.num=2086;employeea.name=Zhao xiwang;,printf(input base,addition,cost:n);scanf(f,f,f,程序运行结果为:input base,addition,cost:805.85,376.57,123.52Number=2086Name=Zhao xiwangBase=805.85Addition=376.57Cost=123.52Salary=1085.90,3结构体变量的初始化 结构体变量的初始化和
7、对数组的初始化相类似。将各个成员的初值用一对花括弧括起来,括弧内各数据项的数据类型、顺序要和结构体类型说明中的成员类型相匹配,数据项间用逗号分隔。如果初值的个数少于结构中成员的个数,则余下的成员将自动初始化为0或NULL。例如:struct student int num;char name10;char sex;int age;char addr50;int score;,main()struct student stu=1422,Lin Hui,M,18,Shang Hai,85;printf(Number=dnName=snSex=cn,stu.num,stu.name,stu.sex)
8、;printf(Age=dnAddress=snScore=dn,stu.age,stu.addr,stu.score);,程序运行结果为:Number=1422Name=Lin HuiSex=MAge=18Address=Shang HaiScore=85,11.1.3 结构体的嵌套 结构体类型定义时,其成员的类型也可以是结构体类型,即结构体类型定义是可以嵌套的。结构体定义的嵌套可以是多重的。,例如,定义一个“职工信息”的结构体类型。每个职工包含编号(num)、姓名(name)、性别(sex)、出生日期(birthday)、家庭住址(addr)等信息。其中出生日期包括年(year)、月(mo
9、nth)、日(day)3个数据项,家庭住址包括城市(city)、街道(street)、门牌号码(streetnum)等信息。职工信息的逻辑结构如图11.3所示。,图11.3 职工信息逻辑结构,显然“职工信息”中的“出生日期”和“家庭住址”应该用结构体类型描述,首先定义结构体类型“日期”struct date和“住址”struct address如下。struct date int year;/*年*/int month;/*月*/int day;/*日*/;struct address char city50;/*城市*/char street50;/*街道*/int streetnum;/*
10、门牌号码*/;,然后定义结构体类型“职工”struct employee如下。struct employee int num;char name10;char sex;struct date birthday;struct address addr;,在结构体类型struct employee中,成员birthday是struct date结构体类型,它又有自己的成员year、month、day,成员addr是 struct address结构体类型,它又有自己的成员city、street、streetnum,这就是结构体类型的嵌套定义。对于嵌套的结构体,引用时应按照从左到右,从外到内的方式,
11、用“”一级一级地运算,直到找到最低一级的成员。,例如:struct employee emp;emp.num=1001;strcpy(emp.name,Liu Xiaomei);emp.sex=F;emp.birthday.year=1986;emp.birthday.month=5;emp.birthday.day=18;strcpy(emp.addr.city,Bei Jing);strcpy(emp.addr.street,Changan street);emp.addr.streetnum=168;,定义了struct employee类型的变量emp,对其各个成员赋值。赋值后结构体变
12、量emp在内存中的存储形式如图11.4所示。,图11.4 结构体变量emp,11.2 结构体数组,11.2.1 结构体数组的定义,结构体数组的定义方法与其他整型数组、实型数组和字符型数组的定义方法类似。例如:struct student int num;char name10;char sex;int age;char addr50;int score;;struct student stu40;,与结构体变量的定义类似,结构体数组的定义也可以采用以下的方式:struct student int num;char name10;char sex;int age;char addr50;int
13、score;stu40;,或struct int num;char name10;char sex;int age;char addr50;int score;stu40;,11.2.2 结构体数组的引用例11.3 输入全班的学生的信息(包括学号、姓名、性别、年龄、成绩和家庭住址),并按成绩由高到低的次序排序,输出排序后的全班学生信息登记表。struct student int num;char name10;char sex;int age;char addr50;int score;;,main()struct student stu40,temp;int i,j,k;for(i=0;i4
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 结构 联合体 枚举 类型
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-6015424.html