第8章结构体 白雪飞 baixfaustc. edu.cn 中国科学技术大学电子科学与技术系 Dept of Elec. Sci. Tech, USTC Fal22003
白 雪 飞 baixf@ustc.edu.cn 中国科学技术大学电子科学与技术系 Dept. of Elec. Sci. & Tech., USTC Fall, 2003 第8章 结 构 体
录 结构体 结构体数组 指向结构体的指针 ●定义类型别名 动态存储分配函数 结构体的应用一链表 C语言程序设计-第8章结构体2
C语言程序设计 - 第8章 结构体 2 目 录 ⚫ 结构体 ⚫ 结构体数组 ⚫ 指向结构体的指针 ⚫ 定义类型别名 ⚫ 动态存储分配函数 ⚫ 结构体的应用—链表
结构体( Structure) 结构体概述 结构体类型的声明 结构体变量的定义 结构体变量的初始化 结构体变量的引用 C语言程序设计-第8章结构体
C语言程序设计 - 第8章 结构体 3 结构体 (Structure) ⚫ 结构体概述 ⚫ 结构体类型的声明 ⚫ 结构体变量的定义 ⚫ 结构体变量的初始化 ⚫ 结构体变量的引用
结构体概述 结构体 ■将不同类型的数据组合成一个整体 ■用来表示简单类型无法描述的复杂对象 ■可以用结构体来定义用户自己的数据结构 举例 ■描述学生信息 nun name sex age score addr 12039 Bill Gates M 40 76.5 New York C语言程序设计-第8章结构体4
C语言程序设计 - 第8章 结构体 4 结构体概述 ⚫ 结构体 ◼ 将不同类型的数据组合成一个整体 ◼ 用来表示简单类型无法描述的复杂对象 ◼ 可以用结构体来定义用户自己的数据结构 ⚫ 举例 ◼ 描述学生信息 num name sex age score addr 12039 Bill Gates M 40 76.5 New York
结构体类型的声明 般形式 ■ struct[结构体名] 成员表列 成员表列”形式 类型成员名; 类型成员名; C语言程序设计-第8章结构体5
C语言程序设计 - 第8章 结构体 5 结构体类型的声明 ⚫ 一般形式 ◼ struct [结构体名] { 成员表列 }; ◼ “成员表列”形式 类型 成员名; 类型 成员名; ...
结构体类型声明的说明(1) 声明了一种类型,而不是定义变量 ●结构体名可以没有,但是这样就无法再 次使用该结构体类型了 成员表列中是成员( Member)的定义 成员的定义形式与变量定义相同 成员类型可以是另一结构体类型,但不 可直接或间接递归嵌套 成员表列不可为空,至少要有一个成员 C语言程序设计-第8章结构体6
C语言程序设计 - 第8章 结构体 6 结构体类型声明的说明 (1) ⚫ 声明了一种类型,而不是定义变量 ⚫ 结构体名可以没有,但是这样就无法再 次使用该结构体类型了 ⚫ 成员表列中是成员(Member)的定义 ⚫ 成员的定义形式与变量定义相同 ⚫ 成员类型可以是另一结构体类型,但不 可直接或间接递归嵌套 ⚫ 成员表列不可为空,至少要有一个成员
结构体类型声明的说明(2) 注意{}不表示复合语句,其后有分号 同一结构体的成员不能重名 不同结构体的成员可以重名 结构体成员和其他变量可以重名 结构体类型与其成员或其他变量可重名 struct test[ int testi test 结构体类型名称是 struct结构体名 注意 struct关键字不能省略 C语言程序设计-第8章结构体7
C语言程序设计 - 第8章 结构体 7 结构体类型声明的说明 (2) ⚫ 注意{}不表示复合语句,其后有分号 ⚫ 同一结构体的成员不能重名 ⚫ 不同结构体的成员可以重名 ⚫ 结构体成员和其他变量可以重名 ⚫ 结构体类型与其成员或其他变量可重名 ◼ struct test { int test; } test; ⚫ 结构体类型名称是struct 结构体名, 注意struct关键字不能省略
结构体类型声明的说明(3) 即使两个结构体声明中的成员类型、名 称、顺序都完全一致,它们也是不同的 类型 结构体类型也要“先声明,后使用” 如果结构体类型声明在函数内部,则该 函数之外无法引用此结构体类型 般把结构体类型声明放到文件最前面 ●也可以把结构体类型声明放在头文件里 C语言程序设计-第8章结构体8
C语言程序设计 - 第8章 结构体 8 结构体类型声明的说明 (3) ⚫ 即使两个结构体声明中的成员类型、名 称、顺序都完全一致,它们也是不同的 类型 ⚫ 结构体类型也要“先声明,后使用” ⚫ 如果结构体类型声明在函数内部,则该 函数之外无法引用此结构体类型 ⚫ 一般把结构体类型声明放到文件最前面 ⚫ 也可以把结构体类型声明放在头文件里
结构体类型的声明举例 struct student I unsigned numi /*学号*/ char name[20];/*姓名*/ char sex/ /*性别*/ unsigned agei /*年龄*/ float score/ /*分数*/ char addr[50];/*地址* }; C语言程序设计-第8章结构体9
C语言程序设计 - 第8章 结构体 9 结构体类型的声明举例 struct student { unsigned num; /* 学号 */ char name[20]; /* 姓名 */ char sex; /* 性别 */ unsigned age; /* 年龄 */ float score; /* 分数 */ char addr[50]; /* 地址 */ };
结构体变量的定义(1) 先声明结构体类型再定义变量 struct student unsigned num char name [20]; char sex/ unsigned agei f1oa七 score i char addr [501 struct student stul stu2 i C语言程序设计-第8章结构体10
C语言程序设计 - 第8章 结构体 10 结构体变量的定义 (1) ⚫ 先声明结构体类型再定义变量 struct student { unsigned num; char name[20]; char sex; unsigned age; float score; char addr[50]; }; struct student stu1, stu2;