C语言程序设计 清华大学 郑莉 安颖莲
Page 1
第八讲 结构与联合参考书:,C程序设计,第十章
§ 10.1-§ 10.6,§ 10.8
C语言程序设计 清华大学 郑莉 安颖莲
Page 2
本讲主要内容
结构的定义
结构变量说明
结构体的使用和初始化
结构数组
结构指针
结构体在函数间的传递
结构嵌套
联合体(共用体)
C语言程序设计 清华大学 郑莉 安颖莲
Page 3
结构的定义
结构的概念
- 是 C语言中的构造类型,是由不同数据类型的数据组成的集合体。
- 为处理复杂的数据结构提供了手段。
- 为函数间传递不同类型的参数提供了便利。
定义结构类型
struct 结构名
{
数据类型 成员名 1;
数据类型 成员名 2;

数据类型 成员名 n;
};
C语言程序设计 清华大学 郑莉 安颖莲
Page 4
结构变量说明
变量说明形式
struct 结构名 结构变量名;
注意:
-结构变量的存储类型概念、它的寿命、可见性及使用范围与普通变量、数组等完全一致。
-结构变量说明必须在结构类型定义之后,二者也可同时进行。
-结构变量占内存大小可用 sizeof 运算求出:
sizeof(运算量 )
例 1
C语言程序设计 清华大学 郑莉 安颖莲
Page 9
结构体的使用和初始化
使用形式
- 一般情况下不能把结构体作为一个整体参加数据处理。
- 结构体成员的引用形式,结构变量名,成员名
- "."运算优先于 "*"运算:
*zhao.name 等同于 *(zhao.name)
初始化
- 仅限于外部的和 static型结构体例 2
C语言程序设计 清华大学 郑莉 安颖莲
Page 14
结构数组
具有相同结构的结构体也可以组成数组
结构数组的说明形式
struct 结构名 结构数组名 [元素个数 ];
结构数组初始化
struct 结构名 结构数组名 []={初始数据 };
例 3
例 4
C语言程序设计 清华大学 郑莉 安颖莲
Page 23
结构指针
概念
- 存放结构体首地址
- 结构指针的运算也按照 C语言的地址运算原则进行。
例如,结构指针加一将指向内存中下一个结构体。
说明形式:
struct 结构名 *结构指针名;
用结构指针访问结构成员
(*结构指针名 ).成员名 或 结构指针名 ->成员名
运算次序
++pman->name 等同于 ++(pman->name)
*pman->name 等同于 *(pman->name)
例 5
C语言程序设计 清华大学 郑莉 安颖莲
Page 27
结构体在函数间的传递
以结构体变量作为函数参数
- 传递结构体首地址
结构型函数
结构指针型函数例 6
例 7
例 8
C语言程序设计 清华大学 郑莉 安颖莲
Page 42
结构嵌套
结构的成员项是结构体
参加运算和操作的只能是最内层结构的成员项
内层结构成员的引用形式:
结构变量名,外层成员名,内层成员名
C语言程序设计 清华大学 郑莉 安颖莲
Page 43
联合体(共用体)
定义形式:
union 联合名
{
数据类型 成员名 1;
数据类型 成员名 2;

数据类型 成员名 n;
};
引用形式:
联合名.成员名
C语言程序设计 清华大学 郑莉 安颖莲
Page 44
例:
union uarea
{ char c_data;
short s_data;
long l_data;
}uarea c_data l_datas_data
例 9
C语言程序设计 清华大学 郑莉 安颖莲
Page 48
作业
复习,第十章 § 10.1-§ 10.6,§ 10.8
10.2,10.3,10.4,10.5
预习,第八章、第十一章