1 / 32
文档名称:

第14章 结构体、共用体、枚举和typedef.ppt

格式:ppt   页数:32页
下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

第14章 结构体、共用体、枚举和typedef.ppt

上传人:燕赵才子 2011/7/19 文件大小:0 KB

下载得到文件列表

第14章 结构体、共用体、枚举和typedef.ppt

文档介绍

文档介绍:第14章结构体、共用体、枚举和typedef
程序设计中,如何合理组织数据是门大学问,前面介绍过的数组是种组织数据的方式,但数组只适用于同类型的数据,如果类型不同又当如何?而且,现实中,很多东西都具有不同的属性,以人为例,像姓名、性别、身高等等都是其属性,如何合理存储并方便地访问这些信息,是本章介绍的内容。
什么是结构体
仍以人为例来介绍,要管理姓名、单位、Email地址、联系电话等信息,现实生活中,很多人采用名片的形式,将这些信息印在一张卡片上。收集的一张张名片大大方便了数据的管理,将这种理念借鉴到C语言程序设计中,是否有类似于名片的那么一种变量呢?
有,答案就是“结构体变量”,是一种复合变量,在进一步说明结构体变量前,先来看“结构体”的概念,结构体和结构体变量的关系类似与类型与普通变量的关系,结构体中说明了结构体变量的信息格式,而结构体变量是结构体的实例。
结构体的定义
只有定义了一个结构体,才能声明并使用结构体变量,正如,只有确定了名片上要印什么内容,才能开始印刷名片。结构体的定义就是说明结构体变量要存储什么信息的过程。
C语言提供了关键字struct来定义一个结构,一般形式的结构定义为:
struct 结构名称(或称标识)
{
存储数据列表;(或称成员变量列表)
};
注意:在定义结构时,一定不要忘记花括号后的分号,因为结构的定义可以看成一条完整的C++语句,否则编译器会报错。
举例来说,
struct person
{
char name[20];
int age;
char email[50];
};
声明结构体变量
以上面person结构为例,定义完毕后,person就可以看成是一种类型,可以通过下述形式声明结构体变量zangsan:
struct person zangsan;
注意区分person和zangsan,person只是结构体定义,是种规范说明,编译器并不为其分配内存空间,而zangsan是实实在在的结构体变量,占据一定的内存空间。
在定义结构体的同时也可以完成一个或多个结构体变量的声明,举例来说:
struct person
{
char name[20];
int age;
char email[50];
}zangsan,lisi,wangwu,*zaoliu;
上述代码在定义结构体person的同时,一口气声明了3个结构体变量:zangsan,lisi,wangwu,甚至还声明了一个指向person结构的指针zaoliu。
初始化结构变量
在声明结构变量的同时,可以进行变量的初始化,对结构体中每个数据初始化,用逗号隔开,并用花括号包裹起来,举例来看:
struct person zangsan={“Zang San”, 24, “zs@”};
还可以将结构体定义,结构体变量声明和初始化放在一起来完成,如:
struct person
{
char name[20];
int age;
char email[50];
}zangsan={“Zang San”, 24, “zs@”}, *pzs=&zangsan;
访问结构体成员<br****惯上将诸如字符串name、int变量age和字符串email等称为结构体person及其声明变量的“数据成员”,简称“成员”。
声明了一个结构体变量后,可以使用成员操作符(.)来访问各个成员(内部存储的数据),,(结构体变量)中存储的姓名、年龄和email等信息,来看一段示例:
代码‑访问结构体变量中的数据成员StructSample
结构体定义的位置
读者可以做个有趣的尝试:将中结构体定义的部分转移到main函数的后面,重新编译运行,会发生什么?
编译器会报一大堆的错误,正如“使用变量前必须先对其声明”一样,在使用结构体类型声明结构体变量之前,必须要先进行结构体的定义,编译器据此才知道如何为结构体中的数据成员分配内存空间,才能声明结构体变量。
除了如的定义方式外,结构体还可以定义在函数(包括main函数)中,两种定义方式的区别在于结构体可见域不同,如果定义在函数外,从定义处到本文件结束,结构体都可见,可用结构体声明结构体变量,但如果定义在特定函数中,只有定义处到该函数结束,结构体可见,如果在函数外使用结构体声明结构体变量,可能会引发错误。
一种推荐的写法是将结构体定义在头文件中,只要某文件A包含了此头文件,便可在A中自由声明结构体变量。
结构体变量赋值
C语言不允许使用一个数组直接为另一个数组赋值,但使用一个结构体变量为另一个结构体变量赋值