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

《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 addr3。

2、0; /* 地址 */;,11.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(s。

3、truct student),sizeof(student1);,为了方便,可以这样定义结构体变量:,#define STUDENT struct student STUDENTintnum; 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;,三、直接定义。

4、变量,struct intnum; char name20; char sex; int age; float score; 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、一般情况下,不能将一个结构体变量作为整体来引用,只。

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+;+student1.a。

6、ge; 例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; char na。

7、me20; 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 student 。

8、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 studentlong int nnum;char name20;char sex;floatscore; struct student stu_1;struct student *p;p = ,结构体指针,通过指向运算符引用结构体中的成员。例、 p-nump-namep-sexp-score 因此结构体成员的引用方式有以下三种: 结构体变量.成员名 (*p).成员名 p-成员名,三、指向结构体数组的指针,例1: struct student stu3;struct stu。

10、dent *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 共用体名成员列表; 变量列表; 例、,注意区分: “共用体”:各成员占相同的起始地址,所占内存长度等于最长的成员所占内存。 “结构体”:各成员占不同的地址,所占内存长度等于全部成员所占内存之。

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, week_end; weekday = mon;week_end = sun; sun、mon、.。

14、、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。,3、枚举值可以作判断,例、 if (weekday = mon).if (weekday su。

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

16、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 i,j;,2、简化数据类型的书写。 例3、typedef structint month。

17、;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 (*POINTER)( ); /* POINT。

18、ER是指向函数的指针,该函数返回整型 */ 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; 以下叙述正确的是:( ) A。

19、)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) 60 struct st int x; int *y; *p;int dt4= 10,20,30,40 ;struct st aa4= 50,C,本章要求及作业,、结构体的概念,结构体指针,结构体数组。2、共用体的概念。3、枚举类型。4、typedef定义新数据类型。 作业: 11.1。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值