C语言的结构体和共用体

上传人:宝路 文档编号:47740746 上传时间:2018-07-04 格式:PPT 页数:53 大小:285.61KB
返回 下载 相关 举报
C语言的结构体和共用体_第1页
第1页 / 共53页
C语言的结构体和共用体_第2页
第2页 / 共53页
C语言的结构体和共用体_第3页
第3页 / 共53页
C语言的结构体和共用体_第4页
第4页 / 共53页
C语言的结构体和共用体_第5页
第5页 / 共53页
点击查看更多>>
资源描述

《C语言的结构体和共用体》由会员分享,可在线阅读,更多相关《C语言的结构体和共用体(53页珍藏版)》请在金锄头文库上搜索。

1、11.1 概述C语言的数据类型: 基本类型: int char float double指针类型 构造类型:数组、结构体、共用体 枚举类型 空类型 void结构体(structure)是一种数据类型,它把互相联系的数据组合成一个整体。例、一个学生的学号、姓名、性别、年龄、成绩、 地址,是互相联系的数据,在C语言中用“结构 体(structure)”来定义。struct studentint num; /* 学号 */char name20; /* 姓名 */char sex; /* 性别 */int age; /* 年龄 */float score; /* 成绩 */char addr30;

2、/* 地址 */; 11.2 结构体变量的定义结构体是一种数据类型 (像int、char、 flaot数据类型一样),可以用它定义变量。用结构体类型定义变量的方式有三种:一、先定义结构体类型,再定义变量 例、 struct studentint num; char name20; char sex; int age; float score; char addr30;; struct student student1, student2;结构体变量中的各成员,在内存中顺序存放。结 构体变量所占内存大小用运算符sizeof计算。 例 、printf(“ %d %d n“,sizeof(struc

3、t student),sizeof(student1);为了方便,可以这样定义结构体 变量:#define STUDENT struct student STUDENTint num; char name20; char sex; int age; float score; char addr30; ; STUDENT student1, student2;二、在定义类型的同时定义变 量 struct studentint num; char name20; char sex; int age; float score; char addr30; student1, student2;三、直接

4、定义变量struct int num; char name20; char sex; int age; float score; char addr30; student1, student2; 四、成员是另一个结构体变量 struct date int month; int day; int year; ; struct studentint num; char name20; char sex; int age; struct date birthday; char addr30; student1, student2; 11.3 结构体变量的引用1、一般情况下,不能将一个结构体变量作为整

5、体来引用 ,只能引用其中的成员(分量)。引用结构体成员的方 式:结构体变量名.成员名 .是“成员运算符” 例1、printf(“%d,%s,%c,%d,%f,%s“, student1.num, student1.name, student1.sex,student1.age, student1.score, sutdent1.addr);printf(“%d,%s,%c,%d,%f,%s“, student1);例2、student2.score = student1.score;sum = student1.score + student2.score;student1.age+;+stu

6、dent1.age; 例3、scanf(“%d“, 2、当成员是另一个结构体变量时,应一级 一级地引用成员。 例4、student1.num;student1.name;student1.birthday.month;student1.birthday.day;student1.birthday.year;3、仅在以下两种情况下,可以把结构体变量 作为一个整体来访问。 (1) 结构体变量整体赋值,例、student2 = student1; (2)取结构体变量地址,例、printf(“%x“, 返回本章目录11.4 结构体变量的初 始化struct studentlong int num;ch

7、ar name20;char sex;char addr20;a = 89031, “Li Lin“, M, “123 Beijing Road“; 注意:不能在结构体内赋初值。例、 struct studentlong int num = 89031;char name20 = “Li Lin“;char sex = M; char addr30 = “123 Bejing Road“;a;11.5 结构体数组一、结构体数组的定义struct studentint num;char name20;char sex;int age;float score;char addr30;struct

8、student stu3; 二、结构体数组的初始化 ( 见课本P266)struct studentint 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 Road“ ;三、举例例11.2 对候选人得票的统计程序。设有 三个候选人,

9、每次输入一个得票的候选 人的名字,要求最后输出各候选人得票 结果。运行11.6 结构体指针一、结构体指针 结构体指针:指向结构体变量的指针。例 、struct student long int nnum;char name20;char sex;float score; ; struct student stu_1; struct student *p; p = 结构体指针,通过指向运算符引用结 构体中的成员。例、p-nump-namep-sexp-score 因此结构体成员的引用方式有以下三种:n 结构体变量.成员名n (*p).成员名n p-成员名三、指向结构体数组的指针例1:struct

10、 student stu3; struct student *p = stu; p+;p+;struct student stu3; struct student *p ; p = stu; p-num; p+; p-num ;p+; p-num;三、用结构指针作函数的参数例11.5有一个结构体变量stu,内含 学生学号、姓名和三门课程的成绩。要 求在main中赋初值,在函数print中打印 输出。运行说明:1、结构体的成员作函数的参数。与普通变量作函数参数的用法相同。值传送,不 能修改实参的值。 2、结构体指针作函数的参数。将结构体的地址传送给函数,效率高,可以修改 实参的值。 3、结构体作

11、函数的参数。将结构体的全部成员值传送给函数,效率低,不 能修改实参的值。四、举例例11.6 有4个学生,每个学生包括学号 、姓名和成绩。要求找出成绩最高者的 姓名和成绩。返回本章目录运行11.8 共用体一、共用体的概念当需要把不同类型的变量存放到同一段内存单 元,或对同一段内存单元的数据按不同类型处 理,则需要使用“共用体”数据结构。 例、把一个整型变量、一个字符型变量、一个实 型变量放在同一个地址开始的内存单元中。 共用体的定义形式:union 共用体名成员列表; 变量列表; 例、 union data int i;char ch;float f; 注意区分: “共用体”:各成员占相同的起始

12、地址,所占 内存长度等于最长的成员所占内存。 “结构体”:各成员占不同的地址,所占内存 长度等于全部成员所占内存之和。二、共用体变量的引用只能引用共用体变量的成员,如、union data a;a.i;a.ch;a.f; 三、共用体类型数据的特点 、共用体变量中的值是最后一次存放的 成员的值,如:a.i = 1;a.ch = a;a.f = 1.5;完成以上三个赋值语句后,共用体变量 的值是1.5,而a.i=1和a.ch=a已无意义 。、共用体变量不能初始化,例、union dataint i;char ch;float f;a=1,a, 1.5; 例11.11 设有若干个人员的数据,其中有学

13、生和 教师。学生数据包括:姓名、号码、性别、职业 、班级。教师数据包括:姓名、号码、性别、职 业、职务。如图、分析:学生数据的class(班级)和教师数据的 position(职务)类型不同,但在同一表格中,使 用“共用体”数据结构。运行11.9 枚举类型如果一个变量只有几种可能的值,可以 定义为枚举类型。“枚举”:将变量可能的值一一列举出来 。变量的值只能取列举出来的值之一。用关键字enum定义枚举类型:例、enum weekday sun, mon, tue, wed, thu, fri, sat;weekday是枚举类型名,可以用于定义变量,如、enum weekday workday,

14、 week_end;weekday = mon;week_end = sun;sun、mon、.、sat称为“枚举元素”或“枚举 常量”。说明: 1、枚举元素是常量。在编译器中,按定义的顺序取 值0、1、2、.。例、weekday = mon;printf(“%d“, weekday); 输出整数1。2、枚举元素是常量,不是变量,因此不能赋值。sun = 0; mon = 1; 但在定义枚举类型时,可以指定枚举常量的 值,如、enum weekday sun=7, mon=1, tue, wed, thu, fri, sat;此时,tue、wed、.的值从mon的值顺序加1。如, tue=2。

15、3、枚举值可以作判断,例、if (weekday = mon).if (weekday sun).4、整型与枚举类型是不同的数据类型,不能直接 赋值,如、workday = 2; /* workday是枚举类型 */但可以通过强制类型转换赋值,如、workday = (enum weekday)2;例11.12 口袋里有红、黄、蓝 、白、黑五种颜色的球若干个。 每次从口袋中取出三个球,打印 出三种不同颜色球的可能取法。 分析:球的颜色只可能取五种值 ,用枚举类型变量处理。 运行11.10 用typedef定义类型一、概念关键字typedef用于定义一种新的数据类型,它代表已 有数据类型,是已有数据类型的别名。例、typedef int INTEGER;typedef float REAL;定义新数据类型INTEGER,它代表已有数据类型int 。 定义新数据类型REAL, 它代表已有数据类型float 。通过上述定义后,以下两行等价:int i, j ; float a, b

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

当前位置:首页 > 中学教育 > 教学课件

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