内容正文:
第7章 结构与联合
结构类型定义和结构变量说明
任务一
结构数组
任务二
结构指针变量
任务三
联合
任务四
任务一 结构类型定义和结构变量
说明
阶段1 结构类型的定义
阶段2 结构类型变量的说明
阶段3 结构类型变量的赋值
阶段4 结构类型变量的初始化
阶段1 结构类型的定义
结构既然是一种“构造”而成的数据类型,那么在说明和使用之前必须先定义它,也就是构造它,如同在说明和调用函数之前要先定义函数一样。定义一个结构的一般形式为:
struct 结构名
{
成员表列
};
阶段2 结构类型变量的说明
一.先定义结构,再说明结构变量。
二.在定义结构类型的同时说明结构变量。
三.直接说明结构变量。
阶段3 结构类型变量的赋值
前面已经介绍,结构变量的赋值就是给各成员赋值,可用输入语句或赋值语句来完成。
阶段4 结构类型变量的初始化
如果结构变量是全局变量或为静态变量,则可对它作初始化赋值。对局部或自动结构变量不能作初始化赋值。
任务二 结构数组
数组的元素也可以是结构类型的,因此可以构成结构数组,结构数组的每一个元素都是具有相同结构类型的下标结构变量。
任务三 结构指针变量
阶段1 结构指针变量的说明和使用
阶段2 结构指针变量作函数参数
阶段3 动态存储分配
阶段4 链表的概念
阶段1 结构指针变量的说明和使用
结构指针变量中的值是所指向的结构变量的首地址。 通过结构指针即可访问该结构变量,这与数组指针和函数指针的情况是相同的。结构指针变量说明的一般形式为:
struct 结构名*结构指针变量名
阶段2 结构指针变量作函数参数
在ANSI C标准中允许用结构变量作函数参数进行整体传送。 但是这种传送要将全部成员逐个传送, 特别是成员为数组时将会使传送的时间和空间开销很大,严重地降低了程序的效率。 因此最好的办法就是使用指针,即用指针变量作函数参数进行传送。 这时由实参传向形参的只是地址,从而减少了时间和空间的开销。
阶段3 动态存储分配
一.分配内存空间函数malloc
调用形式:
(类型说明符*) malloc (size)
功能:在内存的动态存储区中分配一块长度为"size" 字节的连续区域。函数的返回值为该区域的首地址。“类型说明符”表示把该区域用于何种数据类型。(类型说明符*)表示把返回值强制转换为该类型指针。“size”是一个无符号数。
阶段3 动态存储分配
二.分配内存空间函数 calloc
calloc 也用于分配内存空间。调用形式:
(类型说明符*)calloc(n,size)
功能:在内存动态存储区中分配n块长度为“size”字节的连续区域。函数的返回值为该区域的首地址。(类型说明符*)用于强制类型转换。calloc函数与malloc 函数的区别仅在于一次可以分配n块区域。
阶段3 动态存储分配
三.释放内存空间函数free
调用形式:
free(void*ptr);
功能:释放ptr所指向的一块内存空间,ptr 是一个任意类型的指针变量,它指向被释放区域的首地址。被释放区应是由malloc或calloc函数所分配的区域。
阶段4 链表的概念
对链表的主要操作有以下几种:
1.建立链表;
2.结构的查找与输出;
3.插入一个节点;
4.删除一个节点;
任务四 联合
阶段1 联合的定义
阶段2 联合变量的说明
阶段3 联合变量的赋值和使用
阶段1 联合的定义
“联合”也是一种构造类型的数据结构。在一个联合内可以定义多种不同的数据类型, 一个被说明为该联合类型的变量中,允许装入该联合所定义的任何一种数据,这在前面的各种数据类型中都是办不到的。
阶段2 联合变量的说明
联合变量的说明和结构变量的说明方式相同, 也有3种形式。即先定义,再说明;定义同时说明;直接说明。
阶段3 联合变量的赋值和使用
对联合变量的赋值和使用,都只能是对变量的成员进行。联合变量的成员表示为:
联合变量名.成员名
例如,a被说明为perdata类型的变量之后,可使用 a.class和a.office。不允许只用联合变量名作赋值或其他操作。 也不允许对联合变量作初始化赋值,赋值只能在程序中进行。一个联合变量的值就是联合变员的某一个成员值。
$$