C语言的结构体和共用体.ppt

上传人:小飞机 文档编号:6503953 上传时间:2023-11-07 格式:PPT 页数:53 大小:241.99KB
返回 下载 相关 举报
C语言的结构体和共用体.ppt_第1页
第1页 / 共53页
C语言的结构体和共用体.ppt_第2页
第2页 / 共53页
C语言的结构体和共用体.ppt_第3页
第3页 / 共53页
C语言的结构体和共用体.ppt_第4页
第4页 / 共53页
C语言的结构体和共用体.ppt_第5页
第5页 / 共53页
点击查看更多>>
资源描述

《C语言的结构体和共用体.ppt》由会员分享,可在线阅读,更多相关《C语言的结构体和共用体.ppt(53页珍藏版)》请在三一办公上搜索。

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

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

3、义结构体变量:,#define STUDENT struct studentSTUDENTintnum;char name20;char sex;int age;floatscore;char addr30;;STUDENT student1,student2;,二、在定义类型的同时定义变量,struct studentintnum;char name20;char sex;int age;floatscore;char addr30;student1,student2;,三、直接定义变量,struct intnum;char name20;char sex;int age;float sco

4、re;char addr30;student1,student2;,四、成员是另一个结构体变量,struct date int month;int day;int year;;struct studentintnum;char name20;char sex;int age;struct date birthday;char addr30;student1,student2;,11.3 结构体变量的引用,1、一般情况下,不能将一个结构体变量作为整体来引用,只能引用其中的成员(分量)。引用结构体成员的方式:结构体变量名.成员名.是“成员运算符”例1、printf(%d,%s,%c,%d,%f,%

5、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+;+student1.age;例3、scanf(%d,2、当成员是另一个结构体变量时,应一级一级地引用成员。例4、student1.num;student1.name;student1.birthd

6、ay.month;student1.birthday.day;student1.birthday.year;,3、仅在以下两种情况下,可以把结构体变量作为一个整体来访问。(1)结构体变量整体赋值,例、student2=student1;(2)取结构体变量地址,例、printf(%x,返回本章目录,11.4 结构体变量的初始化,struct studentlong int num;char name20;char sex;char addr20;a=89031,Li Lin,M,123 Beijing Road;注意:不能在结构体内赋初值。例、struct studentlong int num

7、=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 student stu3;,二、结构体数组的初始化(见课本P266),struct studentint num;char name20;char sex;int age;float score;char addr30;stu3=10101,Li Lin,M

8、,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对候选人得票的统计程序。设有三个候选人,每次输入一个得票的候选人的名字,要求最后输出各候选人得票结果。,运行,11.6 结构体指针一、结构体指针结构体指针:指向结构体变量的指针。例、,struct studentlong int nnum;char name20;char sex;floatscore;struct student stu_1;str

9、uct student*p;p=,结构体指针,通过指向运算符引用结构体中的成员。例、p-nump-namep-sexp-score因此结构体成员的引用方式有以下三种:结构体变量.成员名(*p).成员名 p-成员名,三、指向结构体数组的指针,例1:struct 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中赋初值,

10、在函数print中打印输出。,运行,说明:,1、结构体的成员作函数的参数。与普通变量作函数参数的用法相同。值传送,不能修改实参的值。2、结构体指针作函数的参数。将结构体的地址传送给函数,效率高,可以修改实参的值。3、结构体作函数的参数。将结构体的全部成员值传送给函数,效率低,不能修改实参的值。,四、举例,例11.6 有4个学生,每个学生包括学号、姓名和成绩。要求找出成绩最高者的姓名和成绩。返回本章目录,运行,11.8 共用体,一、共用体的概念 当需要把不同类型的变量存放到同一段内存单元,或对同一段内存单元的数据按不同类型处理,则需要使用“共用体”数据结构。例、把一个整型变量、一个字符型变量、一

11、个实型变量放在同一个地址开始的内存单元中。共用体的定义形式:union 共用体名成员列表;变量列表;例、,注意区分:“共用体”:各成员占相同的起始地址,所占内存长度等于最长的成员所占内存。“结构体”:各成员占不同的地址,所占内存长度等于全部成员所占内存之和。,二、共用体变量的引用,只能引用共用体变量的成员,如、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已无意义。,、共用体变量不能初始化,例、uni

12、on dataint i;char ch;float f;a=1,a,1.5;,例11.11 设有若干个人员的数据,其中有学生和教师。学生数据包括:姓名、号码、性别、职业、班级。教师数据包括:姓名、号码、性别、职业、职务。如图、,分析:学生数据的class(班级)和教师数据的position(职务)类型不同,但在同一表格中,使用“共用体”数据结构。,运行,11.9 枚举类型,如果一个变量只有几种可能的值,可以定义为枚举类型。“枚举”:将变量可能的值一一列举出来。变量的值只能取列举出来的值之一。,用关键字enum定义枚举类型:例、enum weekday sun,mon,tue,wed,thu,

13、fri,sat;weekday是枚举类型名,可以用于定义变量,如、enum weekday workday,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;此时,t

14、ue、wed、.的值从mon的值顺序加1。如,tue=2。,3、枚举值可以作判断,例、if(weekday=mon).if(weekday sun).4、整型与枚举类型是不同的数据类型,不能直接赋值,如、workday=2;/*workday是枚举类型*/但可以通过强制类型转换赋值,如、workday=(enum weekday)2;,例11.12口袋里有红、黄、蓝、白、黑五种颜色的球若干个。每次从口袋中取出三个球,打印出三种不同颜色球的可能取法。分析:球的颜色只可能取五种值,用枚举类型变量处理。,运行,11.10 用typedef定义类型,一、概念 关键字typedef用于定义一种新的数据类

15、型,它代表已有数据类型,是已有数据类型的别名。例、typedef int INTEGER;typedef float REAL;定义新数据类型INTEGER,它代表已有数据类型int。定义新数据类型REAL,它代表已有数据类型float。通过上述定义后,以下两行等价:int i,j;float a,b;INTEGER i,j;REALa,b;,二、典型用法:,1、定义一种新数据类型,专用于某种类型的变量,使程序更清晰明了。例1、typedef unsigned int size_t size_t size;/*定义size为无符号整型变量*/例2、typedef int COUNT COUNT

16、 i,j;,2、简化数据类型的书写。例3、typedef structint month;int day;int year;DATE;DATE birthday;DATE*p;DATE d7;例4、typdef unsigned int UINT;UINT i,j;,三、定义新类型的更一般形式:(1)typedef int NUM100;/*申明NUM为整型数组类型*/NUM n;/*n为整型数组变量*/(2)typedef char*STRING;/*申明 STRING是字符指针类型*/STRING p,s10;/*p是字符指针变量,s10是字符指针数组*/,(3)typedef int(*

17、POINTER)();/*POINTER是指向函数的指针,该函数返回整型*/POINTER p1,p2;/*定义p1,p2为指向函数的指针*/,四、typedef 与#define的区别,typedef int COUNT#define COUNT int typedef定义一种新的数据类型(COUNT),它是已有类型(int)的别名。在编译时COUNT类型与int类型相同。#define定义一个宏(COUNT),在预编译时,把字符串COUNT替换为字符串int。返回本章目录,补充练习:,1、若有以下说明和定义typedef int*INTEGER;INTEGER p,*q;以下叙述正确的是:

18、()A)p是int型变量B)p是基类型为int 的指针变量C)q是基类型为int 的指针变量D)程序中可用INTEGER代替int类型名,B,2、设有以下说明语句typedef struct int n;char ch8;PER;则以下叙述中正确的是A)PER是结构体变量名B)PER是结构体类型名C)typedef struct是结构体类型D)struct是结构体类型名,B,3、以下程序的输出是A)10 B)11 C)51 D)60struct st int x;int*y;*p;int dt4=10,20,30,40;struct st aa4=50,C,本章要求及作业,、结构体的概念,结构体指针,结构体数组。2、共用体的概念。3、枚举类型。4、typedef定义新数据类型。作业:11.1,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号