章 | 节 | 知识点 | 精讲文档 |
第十章用户自定义数据类型 | 10.1 结构体数据类型概述 | 结构体类型定义 | 定义一个结构体类型的一般形式为: struct 结构体名 { 类型标识符 成员1名字; 类型标识符 成员2名字; 类型标识符 成员3名字; … }; |
结构体成员 | 定义结构体类型时,“{”和“}”之间的内容被称为成员表列。 l 对结构体变量中的成员,可以单独使用,它的作用与地位相当于普通变量。 l 成员可以属于另一个结构体类型。 l 成员名可以与程序中的变量名相同,二者不代表同一对象。 | ||
10.2 结构体变量的使用 | 结构体变量定义 | 要定义一个结构体类型的变量,可以采取以下三种方法: 1.先定义结构体类型,再定义该类型变量。 2.在定义类型的同时定义变量。 3.不指定类型名而直接定义结构体类型变量。 | |
结构体变量引用 | 引用结构体变量应遵守以下规则: (1)不能将一个结构体变量作为一个整体进行输入和输出。只能对结构体变量中的各个成员分别输入和输出。引用方式为: 结构体变量名.成员名 (2)两个相同类型的结构体变量可以用等号赋值。 (3)如果成员本身又属一个结构体类型,则要用若干级成员运算符,一级一级地找到最低一级的成员。只能对最低级的成员进行存取以及运算。 | ||
结构体变量初始化 | 结构体变量可以在变量定义时进行初始化,定义一个struct student为型的结构体变量并初始化形式如下: struct student student1={89031,"Li Lin",'M',2,3,1993,"123 Beijing Road"}; 其中:{}中为各个成员的值。 | ||
10.3 结构体数组 | 结构体数组定义 | 定义结构体变量的方法相同,只需说明其为数组。定义结构体数组一般形式是: ① struct 结构体名 {成员表列} 数组名[数组长度]; ②先声明一个结构体类型,然后再用此类型定义结构体数组: 结构体类型 数组名[数组长度]; | |
数组元素在内存中的存储 | 数组各元素在内存中连续存放。
| ||
结构体数组初始化 | 对结构体数组初始化的形式是在定义数组的后面加上: ={初值表列}; 例如: struct Person { char name[20]; int count; }leader[3]={“Li”,0,“Zhang”,0,“Sun”,0}; | ||
结构体数组的引用 | 结构体数组的引用完全类似于结构体变量的引用,只是用结构体数组元素来代替结构体变量,其他规则不变。例如: leader[0].count++; //引用某一数组元素的成员 | ||
10.4 结构体指针 | 结构体变量的指针 | 结构体变量也有自己的指针,一个结构体变量的指针就是该变量所占据的内存段的起始地址。可以设一个指针变量,用来指向一个结构体变量,也可以用来指向结构体数组中的元素。 指针变量的基类型必须与结构体变量的类型相同。 | |
成员指向运算符 | 成员指向运算符:-> 设p为指向结构体变量的指针,则以下三种形式等价: ①结构体变量. 成员名; ② (*p).成员名; ③ p->成员名。 | ||
指向结构体的指针作函数参数 | 把一个完整的结构体变量作为参数传递,虽然合法,但要将全部成员值一个一个传递,费时间又费空间,开销大。如果结构体类型中的成员很多,或有一些成员是数组,则程序运行效率会大大降低。在这种情况下,用指针作函数参数比较好,能提高运行效率。 | ||
10.5 共用体数据类型 | 共用体类型及变量定义 | 使几个不同的变量共享同一段内存的结构,称为 “共用体”类型的结构。 定义共用体类型的一般形式为: union 共用体名 { 成员表列 }; | |
共用体变量引用 | 不能直接输入和输出共用体类型变量,输入输出时用共用体变量的成员。 在使用共用体类型数据时要注意以下一些特点: (1)同一个内存段可以用来存放几种不同类型的成员,但在每一瞬时只能存放其中一种,而不是同时存放几种。 (2)共用体变量中起作用的成员是最后一次赋值的成员。 (3)可以对共用体变量初始化,但初始化表中只能有一个常量。 | ||
10.6 枚举数据类型 | 枚举类型定义 | 如果一个变量只有几种可能的值,可以定义为枚举类型。 定义枚举类型用enum开头。例如下面语句定义了一个枚举类型enum weekday: enum weekday {sun, mon, tue, wed, thu, fri, sat}; | |
枚举常量 | C编译对枚举类型的枚举元素按常量处理,故称枚举常量。枚举元素作为常量是有值的,C语言编译按定义时的顺序使它们的值为0, 1, 2, …。在上面定义中,sun的值为0,mon的值为1,……,sat为6 | ||
枚举变量定义 | 用前面定义的枚举类型enum weekday来定义变量如下: enum weekday workday, week_end; | ||
10.7 用typedef定义数据类型 | 用typedef定义新的类型名 | 可以用typedef定义新的类型名来代替已有的类型名。如: typedef int INTEGER; typedef float REAL; |

