《c语言程序设计教学资料》第12章-结构体和共同体.ppt

上传人:小飞机 文档编号:5896108 上传时间:2023-08-31 格式:PPT 页数:47 大小:6.70MB
返回 下载 相关 举报
《c语言程序设计教学资料》第12章-结构体和共同体.ppt_第1页
第1页 / 共47页
《c语言程序设计教学资料》第12章-结构体和共同体.ppt_第2页
第2页 / 共47页
《c语言程序设计教学资料》第12章-结构体和共同体.ppt_第3页
第3页 / 共47页
《c语言程序设计教学资料》第12章-结构体和共同体.ppt_第4页
第4页 / 共47页
《c语言程序设计教学资料》第12章-结构体和共同体.ppt_第5页
第5页 / 共47页
点击查看更多>>
资源描述

《《c语言程序设计教学资料》第12章-结构体和共同体.ppt》由会员分享,可在线阅读,更多相关《《c语言程序设计教学资料》第12章-结构体和共同体.ppt(47页珍藏版)》请在三一办公上搜索。

1、第12章 结构体和共用体,主要内容,定义结构体类型变量的方法 结构体变量的引用 结构体变量的初始化 结构体数组 指向结构体类型数据的指针 共用体 用typedef定义类型,为什么要定义结构体类型,在程序例如何表示一人(姓名、年龄、性别)想表示多个人呢?如何用计算机程序实现下述表格的管理?,初始化,优点:结构紧凑,方便管理,数据的相关性强,便于查找,赋值时只针对某个学生,局部的输入错误不会影响全局和其他人信息,结构体和共用体,C语言允许用户根据具体问题利用已有的基本类型来构造自己所需的数据类型数组、结构体、共用体都数据构造性数据类型结构体定义:由若干不同类型的数据项组成(不同类型数据的集合),构

2、成结构体的各个数据项称为结构体成员共同体定义:由若干不同类型的数据项组成,构成共同体的各个数据项称为共同体成员,数组、结构体、共同体比较,数组:相同类型数据构成,适合于对具有相同类型属性的数据进行批处理结构体:将不同类型的数据组织到统一的名字下,适合于关系紧密、逻辑相关、具有相同或者不同属性的数据进行处理,适合于数据库管理系统共同体:逻辑关系相关的不同类型数据集合,但数据成员是情形互斥的,每个时刻只有一个数据成员起作用。,struct 结构体名 数据类型 成员1名字;数据类型 成员2名字;数据类型 成员n名字;;,成员列表,结构体,定义结构体第一步:声明结构体模板 格式:,如:struct s

3、tudent int num;char name20;char sex;int age;float score4;char addr30;,声明结构体模板的主要目的是利用已有的数据类型定义一个新的数据类型 结构体模板只是声明了一种数据类型,定义了数据的组织形式,并未声明结构体类型的变量,定义结构体第二步:利用已经定义好的结构体数据类型定义结构体变量 定义结构体变量方式:,(1)先声明结构体模板,在定义结构体变量,struct 结构体名 结构体成员变量的定义;变量名1,变量名2,.,变量名n;,struct 结构体名 成员列表;struct 结构体名 变量名1,变量名2,.,变量名n;,(2)在

4、声明结构体模板的同时定义结构体变量,(3)在直接定义结构体变量,struct 结构体成员变量的定义;变量名1,变量名2,.,变量名n;,此时不出现结构体名,方法二:struct student int number;char name20;char sex;int age;float score;stu1,stu2;,方法一:struct student int number;char name20;char sex;int age;float score;struct student stu1,stut2;,方法三:struct int number;char name20;char sex

5、;int age;float score;stu1,stu2;,说明:结构体名(struct):用于标识一种新的数据类型,即结构体类型,可以省略。注意区分结构体类型与基本数据类型的不同,它是复合数据类型。结构体成员变量与普通变量的定义一样,它还可以是结构体变量。,嵌套的结构体,struct Date int month;int day;int year;,struct Stu int num;char name20;char sex;int age;struct Date birthday;char addr30;,用typedef定义数据类型,只是为一种已经存在的类型(系统固有或者用户自定义

6、的数据类型)定义一个新名字而已,并未定义一个新的数据类型 例:typedef int integer;,typedef优点之一:有利于程序的通用性和移植性,程序会依赖于硬件特性,用typedef类型就便于移植。,例:用typedef来定义与平台无关的类型。定义一个叫INTEGER的int类型,在目标平台一上,它占4个字节:typedef int INTEGER;在某些平台下,int占2个字节。要使数据类型的取值范围不变,只需要做如下定义:typedef long INTEGER;也就是说,当跨平台时,只要改下 typedef 本身就行,不用对其他源码做任何修改。,typedef与#define

7、有相似之处 例如:typedef int COUNT;#define COUNT int 作用:都是用COUNT代表int。But,它们二者是不同的。,#define是在预编译时处理的,它只能作简单的字符串替换;typedef是在编译时处理的。实际上它并不是作简单的字符串替换,而是采用如同定义变量的方法那样来声明一个类型。,结构体变量初始化,对字符数组类型结构体成员进行赋值时,必须使用字符串处理函数strcpy(),结构体变量的引用,例:,当出现结构体嵌套时,必须以级联方式访问结构体成员,结构体变量输入输出,结构体变量的地址是结构体变量所占内存空间的首地址,而结构体成员的地址与结构体成员在结构

8、体中所处的位置及该成员所占内存空间的字节数相关,在定义了结构体变量以后,当然可以引用这个变量。但应遵守以下规则:(1)不能将一个结构体变量作为一个整体进行输入和输出。例:printf(“%d,%s,%c,%d,%fn”,stu1);(2)如果成员本身又属一个结构体类型,则要用若干个成员运算符,一级一级地找到最低的一级的成员。只能对最低级的成员进行赋值或存取以及运算。例:,(3)对结构体变量的成员可以像普通变量一样进行各种运算(根据其类型决定可以进行的运算)。例:stu2.score=stu1.score;sum=stu1.score+stu2.score;student1.age+;+stud

9、ent2.age;(4)可以引用结构体变量成员的地址,也可以引用结构体变量的地址。例:scanf(%d,(输入stud1.num的值)printf(%p,&stu1);(输出stud1的首地址),结构体所占内存的字节数,多数计算机为了提高内存的寻址效率,为特定的数据类型引入了特殊的内对齐需求。不同的系统和编译器,内存对齐的方式不同,为了满足处理器对齐的要求,可能会在较小的成员后加入补位,导致结构体实际所占内存的字节数比我们想象的多,结构体数组的定义和初始化,结构体指针的定义和初始化,以下3种形式等价:结构体变量成员名(*)成员名-成员名,向函数传递结构体,用结构体指针或结构体数组作为函数参数,向函数传递结构体的地址,按值调用,按地址调用,结构体变量作函数参数实现按值调用,结构体指针作函数参数,从函数返回结构体变量的值,共用体,共用体所占内存的字节数,不能为共用体的所有成员同时进行初始化,只能对第一个成员进行初始化。此外,共用体成员不能进行比较操作,也不能作为函数参数。,

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号