《2023年C案例教程精品讲义word文档第十章1.pdf》由会员分享,可在线阅读,更多相关《2023年C案例教程精品讲义word文档第十章1.pdf(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、学习必备 欢迎下载 第 10 章 结构体与共用体 第一节 结构体类型变量的定义和引用 一、结构体类型的定义 结构体类型的一般定义形式如下:struct 结构体类型名 类型名 1 成员变量名 1;类型名 2 成员变量名 2;类型名 n 成员变量名 n;例如,一个考生的结构体类型可定义如下:struct exam char name30;char sex;int age;char addr40;int number;float score20;这里定义了一个exam 类型的结构体,它包含有姓名name(字符数组)、性别 sex(字符型)、年龄 age(整型)、地址 addr(字符数组)、考号 nu
2、mber(整型)和成绩 score(单精度浮点型)6 个成员。可以看到,利用结构体类型数据,用户能够自行定义满足自己需要的数据结构,适应实际需求。二、结构体类型变量的定义、引用和初始化 学习必备 欢迎下载 结构体类型定义只提供了一个类型,这个类型就象整型(int)一样是一个数据类型,其中并没有具体的数据,系统不会给它分配存储单元。要使用它,应该定义结构体类型的变量,并利用这种变量来处理具体数据。1结构体类型变量的定义 用已定义的结构体类型来声明结构体类型变量,声明的一般形式为 struct 结构体类型名 变量表列;struct exam exam1;/*定义结构体变量 exam1*/2结构体类
3、型变量的引用 引用结构体变量的一般形式为 结构体变量.成员 exame1.age=18;3结构体类型变量的初始化 同其他类型的变量一样,结构体类型变量的初始化可以在定义时完成。如果需要在程序中进行初始化。则需要逐个成员逐级对最低一级的成员赋初值。第二节 结构体数组的定义、初始化和引用 一、结构体数组的定义和初始化 定义结构体数组与定义结构体变量一样,可以在定义结构体类型的同时声明,也可以在定义结构体类型之后声明。如定义一个一维数组的形式可以写成 struct 结构体名 结构体数组名长度;二、结构体数组的成员变量引用 其一般引用形式为 数组名下标.成员变量名 第三节 指向结构体类型数据的指针 一
4、、指向结构体类型数据的指针 定义如下这里定义了一个类型的结构体它包含有姓名字符数组性别字符类型变量的定义引用和初始化学习必备欢迎下载结构体类型定义只提供理具体数据结构体类型变量的定义用已定义的结构体类型来声明结构体学习必备 欢迎下载 定义了结构体类型之后,可以声明结构体变量,也可以定义指向结构体变量的指针。struct stu stu1=张文,男,21,上海路 2 号,30001,80,a,*p1;p1=&a,p=&stu1;现在共有 3 种引用结构体成员变量的格式:(1)结构体变量.成员名,例如 stu1.name。(2)(*q 指针变量).成员名,例如(*p).name。(3)指针变量-成
5、员名,例如 p-name。二、指向结构体数组的指针 可以设定指向结构体数组或数组元素的指针和指针变量 struct stu stu12=张文,男,21,上海路 2 号,30001,80,贾博丽,女,18,建设路 123#,30002,92,*p;p=stu1;三、结构体类型数据作函数型参 根据需要,可以向一个函数传递结构体变量的成员,结构体变量或者结构体数组。即结构体类型数据可以作函数的型式参数。1结构体变量的成员作函数型参 2结构体变量和结构体变量的地址作函数型参 3结构体数组作函数型参 第四节 共用体类型变量的定义和引用 一、共用体类型及共用体变量的定义 定义共用体类型的一般形式:unio
6、n 共用体名 定义如下这里定义了一个类型的结构体它包含有姓名字符数组性别字符类型变量的定义引用和初始化学习必备欢迎下载结构体类型定义只提供理具体数据结构体类型变量的定义用已定义的结构体类型来声明结构体学习必备 欢迎下载 类型名 1 成员名 1;类型名 2 成员名 2;类型名 n 成员名 n;例如:union stu char name8;float spend;int class;此处定义了一个 stu 类型的共用体 定义共用体类型之后再声明共用体变量:union stu c1,c2,*up;二、共用体变量的引用 不能整体引用共用体变量来进行输入和输出,只能引用共用体变量的成员,如引用上例中声
7、明的共用体变量,可以写为 printf(“%s”,c1.name);p=&c1 p-class=23;应该注意的是,因为共用体变量的各个成员共同使用同一段内存空间,因此在某一瞬时只能有一个成员起作用,而此时其它成员则并不存在。所以在赋值时只能实现对共用体变量的一个成员赋值,也不能实现对共用体变量的初始化。例如,如果有以下赋值语句:定义如下这里定义了一个类型的结构体它包含有姓名字符数组性别字符类型变量的定义引用和初始化学习必备欢迎下载结构体类型定义只提供理具体数据结构体类型变量的定义用已定义的结构体类型来声明结构体学习必备 欢迎下载 scanf(“%s”,&c1.name);c1.spend=4
8、.5;c1.class=56;那么,前两个赋值在最后一个赋值语句执行之后就会丢失,使用下面的语句是不对的,因为此时 name 成员并没有值:if(name6=C)i+;因此,在引用共用体变量时应该注意当前存放在变量中的到底是哪个成员。由于共用体变量存储的这种特殊性,既不能将共用体变量作为含数参数,也不能使函数返回共用体类型的变量。共用体类型一般用来存取在不同场合下会有不同类型取值的对象。因为在这种情况下,如果定义多个不同类型的变量或数组来处理,会造成空间的浪费;既然在某一个时刻只需要一个值,显然使用共用体类型就既节省了内存空间,又同时保证了对象的整体性。定义如下这里定义了一个类型的结构体它包含有姓名字符数组性别字符类型变量的定义引用和初始化学习必备欢迎下载结构体类型定义只提供理具体数据结构体类型变量的定义用已定义的结构体类型来声明结构体