C语言程序设计——结构体和共用体完整.pptx
《C语言程序设计——结构体和共用体完整.pptx》由会员分享,可在线阅读,更多相关《C语言程序设计——结构体和共用体完整.pptx(54页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、n问题:问题:有时需要将不同类型的数据组合成一个有机的整体,以便于引用。如:如:一个学生有学号/姓名/性别/年龄/地址等属性 int num;char name20;char sex;int age;int char addr30;100101 Li Fun M 18 87.5 Beijing num name sex age score addr第1页/共54页12.2结构体的定义结构是一种构造数据类型结构是一种构造数据类型(“结构结构”是由若干个成员组是由若干个成员组成的成的),在使用之前必须先定义,然后才能用来定义,在使用之前必须先定义,然后才能用来定义相应的结构体变量、结构体数组、结构
2、体指针变量。相应的结构体变量、结构体数组、结构体指针变量。结构体类型一般形式:结构体类型一般形式:struct 结构体名结构体名 成员列表成员列表 ;其中各成员都应进行类型说明,即其中各成员都应进行类型说明,即类型名类型名 成员名;成员名;第2页/共54页例:例:struct student int num;char name20;char sex;int age;float score;char addr30;;第3页/共54页结构体变量的定义(1)先声明结构类型,再定义结构体变量先声明结构类型,再定义结构体变量例:例:struct student int num;char name20;f
3、loat score;;struct student stu1,stu2;第4页/共54页结构体变量的定义(2)在声明结构类型的同时定义结构体变量在声明结构类型的同时定义结构体变量例:例:struct student int num;char name20;float score;stu1,stu2;第5页/共54页结构体变量的定义(3)直接定义结构体类型变量直接定义结构体类型变量例:例:struct int num;char name20;float score;stu1,stu2;第6页/共54页结构体变量的引用 一般对结构体变量的使用,包括赋值、输入、一般对结构体变量的使用,包括赋值、输
4、入、输出、运算等都是通过其输出、运算等都是通过其成员成员来实现的。来实现的。结构体变量成员的表示方法:结构体变量成员的表示方法:结构体变量名结构体变量名.成员名成员名例:例:stu1.num(学生学生1的学号的学号)stu1.score(学生学生1的分数的分数)第7页/共54页结构体变量的初始化 和其他类型变量一样,定义结构体变量的同时,和其他类型变量一样,定义结构体变量的同时,给它的成员赋初值。给它的成员赋初值。例:例:#include void main()struct student int num;char name20;float score;stu1=1301,”Zhang San
5、”,82.50;printf(“No.%d,Name:%s,Score:%fn”,stu1.num,stu1.name,stu1.score);第8页/共54页结构体变量的赋值 通过输入语句或赋值语句,实现对结构体变量的通过输入语句或赋值语句,实现对结构体变量的成员赋值。成员赋值。例:例:#include void main()struct student int num;char name20;float score;stu1;stu1.num=1301;stu1.name=”Zhang San”;scanf(“%f”,&stu1.score);printf(“No.%d,Name:%s,S
6、core:%fn”,stu1.num,stu1.name,stu1.score);第9页/共54页嵌套的结构体一个结构体的成员又是一个结构体。一个结构体的成员又是一个结构体。例:例:struct date struct student int month;int num;int day;char name20;int year;char sex;int age;struct date birthday;char addr30;;第10页/共54页 birthdaynum name sex age addr month day year第11页/共54页12.3结构体数组 结构体数组的每一个元素
7、都是具有相同结构类型的结构体数组的每一个元素都是具有相同结构类型的结构体变量。结构体变量。例:例:struct student int num;char name20;float score;stu3;其中,定义了一个结构体数组其中,定义了一个结构体数组stu,共有,共有3个元素,个元素,每个元素都具有每个元素都具有struct student的结构形式。的结构形式。第12页/共54页结构体数组的初始化赋值例:例:struct student int num;char name20;float score;stu3=1301,”Zhang San”,57,1302,“Li Si”,82.50,
8、1303,“Wang Wu”,69;当对全部元素进行初始化赋值时,也可以不给出长度。当对全部元素进行初始化赋值时,也可以不给出长度。第13页/共54页12.4结构体指针变量12.4.1指向结构体变量的指针指向结构体变量的指针一般形式为:一般形式为:struct 结构名结构名 *结构体指针变量名;结构体指针变量名;例:例:struct student int num;char name20;float score;;struct student*pstu;其中定义了一个指向其中定义了一个指向student的指针变量的指针变量pstu。第14页/共54页12.4.1指向结构体变量的指针变量指向结构
9、体变量的指针变量用结构体指针变量,访问结构体变量的各个成员用结构体指针变量,访问结构体变量的各个成员,一般形式为:一般形式为:(*结构体指针变量结构体指针变量).成员名;成员名;或或 结构体指针变量结构体指针变量-成员名;成员名;例:例:(*pstu).num 或或 pstu-num 第15页/共54页例:例:#include void main()struct student int num;char name20;float score;stu1=1301,”Zhang San”,82.50,*pstu;pstu=&stu1;printf(“No.%d,Name:%s,Score:%fn”
10、,stu1.num,stu1.name,stu1.score);printf(“No.%d,Name:%s,Score:%fn”,(*pstu).num,(*pstu).name,(*pstu).score);printf(“No.%d,Name:%s,Score:%fn”,pstu-num,pstu-name,pstu-score);第16页/共54页12.4.2指向结构体数组的指针变量指向结构体数组的指针变量结构体指针变量可指向一个结构体数组,其指针变结构体指针变量可指向一个结构体数组,其指针变量的值是整个结构体数组的首地址。量的值是整个结构体数组的首地址。例:例:设设ps为指向结构体数组
11、的指针变量,为指向结构体数组的指针变量,则则ps指向该结构体数组的指向该结构体数组的0号元素;号元素;ps+1指向该结指向该结构体数组的构体数组的1号元素。号元素。第17页/共54页例:例:#include void main()struct student int num;char name20;float score;stu3=1301,”Zhang San”,57,1302,“Li Si”,82.50,1303,“Wang Wu”,69;struct student*ps=stu;ps+;printf(“No.%d,Name:%s,Score:%fn”,ps-num,ps-name,ps
12、-score);第18页/共54页12.5向函数传递结构体(3种方式)1.用结构体的单个成员作为函数参数,向函数传递结用结构体的单个成员作为函数参数,向函数传递结 构体的构体的单个成员单个成员。这与普通类型的变量作函数参数没什么区别,都是这与普通类型的变量作函数参数没什么区别,都是传值调用传值调用,在函数内部对其进行操作,不会引起实,在函数内部对其进行操作,不会引起实参结构体成员值的变化。参结构体成员值的变化。第19页/共54页2.用结构体变量作为函数参数,向函数传递结构体的用结构体变量作为函数参数,向函数传递结构体的 完整结构完整结构。这种传递,是将整个结构体成员的内容复制给被调这种传递,是
13、将整个结构体成员的内容复制给被调函数。这种方式是函数。这种方式是传值调用传值调用,在函数内部对其进行,在函数内部对其进行操作,不会引起实参结构体成员值的变化。操作,不会引起实参结构体成员值的变化。3.用结构体指针或结构体数组作为函数参数,向函数用结构体指针或结构体数组作为函数参数,向函数 传递结构体的传递结构体的地址地址。由于是由于是传地址调用传地址调用,在函数内部对其进行操作,将,在函数内部对其进行操作,将影响实参结构体成员值的变化。影响实参结构体成员值的变化。第20页/共54页12.6共用体 共用体共用体(也称为联合也称为联合)也是一种也是一种构造的数据类型构造的数据类型。共用体是将不同类
14、型的数据组织在一起共同占用同共用体是将不同类型的数据组织在一起共同占用同一段内存的一种构造数据类型。一段内存的一种构造数据类型。例如,在校学生和教师都填写以下表格:例如,在校学生和教师都填写以下表格:姓名姓名 年龄年龄 职业职业 单位单位其中,职业分两类:教师和学生;其中,职业分两类:教师和学生;而而单位单位一栏里,学生填写班级编号一栏里,学生填写班级编号(整型类型整型类型),教师填写某系某教研室教师填写某系某教研室(整型类型整型类型)。第21页/共54页共用体的定义共用体与结构体的类型声明方法类似。共用体与结构体的类型声明方法类似。共用体的关键字为共用体的关键字为union。一般形式:一般形
15、式:union 共用体名共用体名 成员列表成员列表 ;其中各成员都应进行类型说明,即其中各成员都应进行类型说明,即类型名类型名 成员名;成员名;union department int class;char office20;;第22页/共54页共用体变量的说明(3种形式)(1)union department 先定义再说明;先定义再说明;int class;char office20;;union department a,b;(2)union department 定义同时说明;定义同时说明;int class;char office20;a,b;(3)union 直接说明。直接说明。in
16、t class;char office20;a,b;第23页/共54页共用体与结构体的区别 (1)结构体变量所占内存长度是各成员占的内存长结构体变量所占内存长度是各成员占的内存长度之和。每个成员分别占有自己的内存单元。度之和。每个成员分别占有自己的内存单元。(2)共用体变量所占内存长度是共用体变量所占内存长度是最长最长的成员的长度。的成员的长度。即共用体变量的地址和它的各成员的地址是同一地即共用体变量的地址和它的各成员的地址是同一地址。址。第24页/共54页共用体变量的引用 对共用体变量的使用,包括赋值、使用只能是对对共用体变量的使用,包括赋值、使用只能是对变量的变量的成员成员进行。进行。共用
17、体变量成员的表示方法:共用体变量成员的表示方法:共用体变量名共用体变量名.成员名成员名例:例:a.class a.office 不允许对共用体变量作初始化赋值,赋值只能在不允许对共用体变量作初始化赋值,赋值只能在程序中进行。程序中进行。第25页/共54页#include#define PN 3void main()struct char name10;int age;char job;union int class;char office10;units;bodyPN;例:设有一个教师和学生通用的表格,有姓名、年龄、职例:设有一个教师和学生通用的表格,有姓名、年龄、职业、单位业、单位4 4项。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 结构 共用 完整
限制150内