结构体、共用体、枚举和ty.ppt
《结构体、共用体、枚举和ty.ppt》由会员分享,可在线阅读,更多相关《结构体、共用体、枚举和ty.ppt(32页珍藏版)》请在三一办公上搜索。
1、第14章 结构体、共用体、枚举和typedef,程序设计中,如何合理组织数据是门大学问,前面介绍过的数组是种组织数据的方式,但数组只适用于同类型的数据,如果类型不同又当如何?而且,现实中,很多东西都具有不同的属性,以人为例,像姓名、性别、身高等等都是其属性,如何合理存储并方便地访问这些信息,是本章介绍的内容。,14.1 什么是结构体,仍以人为例来介绍,要管理姓名、单位、Email地址、联系电话等信息,现实生活中,很多人采用名片的形式,将这些信息印在一张卡片上。收集的一张张名片大大方便了数据的管理,将这种理念借鉴到C语言程序设计中,是否有类似于名片的那么一种变量呢?有,答案就是“结构体变量”,是
2、一种复合变量,在进一步说明结构体变量前,先来看“结构体”的概念,结构体和结构体变量的关系类似与类型与普通变量的关系,结构体中说明了结构体变量的信息格式,而结构体变量是结构体的实例。,14.1.1 结构体的定义,只有定义了一个结构体,才能声明并使用结构体变量,正如,只有确定了名片上要印什么内容,才能开始印刷名片。结构体的定义就是说明结构体变量要存储什么信息的过程。C语言提供了关键字struct来定义一个结构,一般形式的结构定义为:struct 结构名称(或称标识)存储数据列表;(或称成员变量列表);注意:在定义结构时,一定不要忘记花括号后的分号,因为结构的定义可以看成一条完整的C+语句,否则编译
3、器会报错。举例来说,struct personchar name20;int age;char email50;,14.1.2 声明结构体变量,以上面person结构为例,定义完毕后,person就可以看成是一种类型,可以通过下述形式声明结构体变量zangsan:struct person zangsan;注意区分person和zangsan,person只是结构体定义,是种规范说明,编译器并不为其分配内存空间,而zangsan是实实在在的结构体变量,占据一定的内存空间。在定义结构体的同时也可以完成一个或多个结构体变量的声明,举例来说:struct personchar name20;int
4、age;char email50;zangsan,lisi,wangwu,*zaoliu;上述代码在定义结构体person的同时,一口气声明了3个结构体变量:zangsan,lisi,wangwu,甚至还声明了一个指向person结构的指针zaoliu。,14.1.3 初始化结构变量,在声明结构变量的同时,可以进行变量的初始化,对结构体中每个数据初始化,用逗号隔开,并用花括号包裹起来,举例来看:struct person zangsan=“Zang San”,24,“”;还可以将结构体定义,结构体变量声明和初始化放在一起来完成,如:struct personchar name20;int ag
5、e;char email50;zangsan=“Zang San”,24,“”,*pzs=,14.1.4 访问结构体成员,习惯上将诸如字符串name、int变量age和字符串email等称为结构体person及其声明变量的“数据成员”,简称“成员”。声明了一个结构体变量后,可以使用成员操作符(.)来访问各个成员(内部存储的数据),如zangsan.name,zangsan.age和zangsan.emal分别代表zangsan这个变量(结构体变量)中存储的姓名、年龄和email等信息,来看一段示例:代码 访问结构体变量中的数据成员StructSample,14.1.5 结构体定义的位置,读者可
6、以做个有趣的尝试:将中结构体定义的部分转移到main函数的后面,重新编译运行,会发生什么?编译器会报一大堆的错误,正如“使用变量前必须先对其声明”一样,在使用结构体类型声明结构体变量之前,必须要先进行结构体的定义,编译器据此才知道如何为结构体中的数据成员分配内存空间,才能声明结构体变量。除了如的定义方式外,结构体还可以定义在函数(包括main函数)中,两种定义方式的区别在于结构体可见域不同,如果定义在函数外,从定义处到本文件结束,结构体都可见,可用结构体声明结构体变量,但如果定义在特定函数中,只有定义处到该函数结束,结构体可见,如果在函数外使用结构体声明结构体变量,可能会引发错误。一种推荐的写
7、法是将结构体定义在头文件中,只要某文件A包含了此头文件,便可在A中自由声明结构体变量。,14.1.6 结构体变量赋值,C语言不允许使用一个数组直接为另一个数组赋值,但使用一个结构体变量为另一个结构体变量赋值是合法的,可以使用赋值操作符(=)将一个结构变量B赋值给另一个结构变量A,这样,结构变量A中的每个成员都将被设置成结构变量B中相应成员的值,即使成员是数组类型也不例外,这种赋值方式被成为成员赋值,见示:,14.2 特殊结构体,上一节中讨论的person结构相对简单,只包含了3个数据成员:name、age和email,如果面对的是更为复杂的结构,将所有的数据成员并排似乎不是个高效的方法,那能否
8、使用结构体嵌套,一层层管理数据呢?,14.2.1 结构体嵌套,顾名思义,结构体嵌套就是“结构体套结构体”,某个结构的数据成员也是一个结构体变量,这样,可以按层次结构合理组织数据,举例来说:struct studentchar name20;struct scorestruct/*结构体scorestruct的定义*/int math;int English;score;/*声明结构体变量score*/struct infostruct/*结构体infostruct的定义*/float height;float weight;info;/*声明结构体变量info*/;,14.2.2 匿名结构体,
9、C语言允许定义匿名结构,所谓匿名结构,就是不指定结构体的名称,但一定要在结构体定义的同时声明至少一个结构体变量,否则,这种用法没有意义,如:structchar name20;int age;wangwu,lisi;这样便声明创建了两个结构体变量wangwu和lisi,可以通过诸如“wangwu.name”等形式来访问其成员,但这种类型没有名称,因此无法在以后的程序中声明这种类型的变量。,14.3 共用体,共用体也是一种特殊的数据组织方式,C语言使用关键字union来定义一个共用体结构,所以,在某些书籍中也将共用体称为“联合”。和结构体类似,共用体的使用也分为“共用体的定义”、“共用体变量的声
10、明、初始化和使用”两大部分。,14.3.1 什么是共用体,和结构一样,共用体也是由数据成员组成的,但在结构中,编译器为每个数据成员都分配内存地址空间,但对共用体来说,所有的数据成员共用一块内存,这个“共用”似乎有些费解,理解方式应当是“在某个确定的时刻,共用体只能表示一种成员类型”。,14.3.2 共用体的定义,共用体可采用如下形式定义:union 共用体名称(或称标识)存储数据列表(或称成员变量列表);注意,结束花括号后的分号(;)不要遗漏,这种定义形式是一个完整的C+语句。举例来说:union computerInfo/*定义一个共用体computerInfo*/char typeid20
11、;float price;某个部门要登记所有的电脑,如果是品牌机,就登记型号(typeid),如果是组装机,就登记价格(price),因此,型号和价格只取其一,这时使用共用体最为合适。,14.3.3 声明共用体变量,和结构体的使用方式一样,定义了共用体后,共用体名可以看成是一种类型,用其可声明共用体变量,基本格式为:union 共用体名 共用体变量;在定义共用体的同时也可以完成一个或多个共用体变量的声明,举例来说:union computerInfo/*定义一个共用体computerInfo*/char typeid20;float price;comp1,comp2;,14.3.4 共用体变
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 结构 共用 枚举 ty

链接地址:https://www.31ppt.com/p-6599063.html