第10章 结构体 为整合不同数据类型、但相互关联的一组数据, C语言提供一种称为“结构体”的数据结构。 教学目的: 掌握结构体类型的定义,结构体变量的定义与引 用,指向结构体数据的指针变量的应用; 了解结构体数组「,链表,枚举型,共用型,已 有类型的别名定义等]。 2024/10/28 1
2024/10/28 1 第10章 结构体 为整合不同数据类型、但相互关联的一组数据, C语言提供一种称为“结构体”的数据结构。 教学目的: 掌握结构体类型的定义,结构体变量的定义与引 用,指向结构体数据的指针变量的应用; 了解结构体数组 [ ,链表,枚举型,共用型,已 有类型的别名定义等]
教学内容: 10.1结构体类型与结构体变量的定义 10.2结构体变量的引用与初始化 10.3结构体数组 10.4指向结构体数据的指针 本章要点 本章作业与上机实践 2024/10/28 2
2024/10/28 2 教学内容: 10.1 结构体类型与结构体变量的定义 10.2 结构体变量的引用与初始化 10.3 结构体数组 10.4 指向结构体数据的指针 本章要点 本章作业与上机实践
10.1*结构体类型与结构体变量的定义 「案例10.1]定义一组反映学生基本情况的结构 类型,用以存储学生的相关信息。 struct date /*日期结构类型*/ int year int month; int day ; 工 struct date /*日期结构类型*/ fint year,month,day; 污 2024/10/28 3
2024/10/28 3 10.1* 结构体类型与结构体变量的定义 [案例10.1] 定义一组反映学生基本情况的结构 类型,用以存储学生的相关信息。 struct date /*日期结构类型*/ {int year ; int month ; int day ; }; struct date /*日期结构类型*/ {int year, month, day ; };
struct std info /*学生信息结构类型*/ {char no[7]; 字符数组的长度=实 char name[9]; 际长度+1(存储结束标志) char sex[3]; struct date birthday; ; 允许是己定义的另一个结构体类型 struct score /*成绩结构类型*/ {char no[7]; int scorel,score2,score3; ; 2024/10/28 4
2024/10/28 4 struct std_info /*学生信息结构类型*/ {char no[7]; char name[9]; char sex[3]; struct date birthday; }; struct score /*成绩结构类型*/ {char no[7]; int score1,score2, score3; }; 字符数组的长度= 实 际长度 +1 (存储结束标志) 允许是已定义的另一个结构体类型
1、结构体类型的定义 struct结构体类型名 数据类型数据项1; 结构体类 数据类型数据项2; 型关键字 数据类型数据项n; }; 分号不能少! 2024/10/28 5
2024/10/28 5 1、 结构体类型的定义 struct 结构体类型名 { 数据类型 数据项1; 数据类型 数据项2; . . 数据类型 数据项n; }; 分号不能少! 结构体类 型关键字
(1)“结构体类型名”和“数据项”的命名规则,与 变量名相同。 (2)相同数据类型的数据项,既可逐个、逐行分别 定义,也可合并成一行定义。 例如,[案例10.1]中的结构体类型date。 (3)结构体类型中的数据项,允许是已定义的另一 个结构体类型。 例如,[案例10.1]中、结构体类型std info的数据 项“birthday'”。 2024/10/28 6
2024/10/28 6 (1)“结构体类型名”和“数据项”的命名规则,与 变量名相同。 (2)相同数据类型的数据项,既可逐个、逐行分别 定义,也可合并成一行定义。 例如,[案例10.1]中的结构体类型date。 (3)结构体类型中的数据项,允许是已定义的另一 个结构体类型。 例如, [案例10.1]中、结构体类型std_info的数据 项“birthday”
2、结构体变量的定义 (1)间接定义一先定义类型、再定义变量 例如,利用[案例10.1]中、结构体类型std info, 定义结构体变量student: 结构体类型名不可 struct std info student 缺!下列写法是错 误的: struct student 则结构体变量student拥有结构体类型std info的全 部数据项。 2024/10/28 7
2024/10/28 7 2、结构体变量的定义 (1)间接定义──先定义类型、再定义变量 例如,利用[案例10.1]中、结构体类型std_info, 定义结构体变量student: struct std_info student ; 则结构体变量student拥有结构体类型std_info的全 部数据项。 结构体类型名不可 缺!下列写法是错 误的: struct student ;
(2)直接定义一定义类型的同时,定义变量 struct[结构类型名] {.}结构变量表; 说明:结构类型中的数据项名(又称成员名), 可以与程序中的变量同名。 返回 2024/10/28 8
2024/10/28 8 (2)直接定义──定义类型的同时,定义变量 struct [结构类型名] { .} 结构变量表; 说明:结构类型中的数据项名(又称成员名), 可以与程序中的变量同名。 [返回]
10.2*结构体变量的引用与初始化 案例10.2]利用[案例10.1]中的结构体类型 std info,定义结构体变量student,用于存储和显示 1个学生的信息。 2024/10/28 9
2024/10/28 9 10.2* 结构体变量的引用与初始化 [案例10.2] 利用[案例10.1]中的结构体类型 std_info,定义结构体变量student,用于存储和显示 1个学生的信息
案例10.1]中定义的结构体类型 #include "struct.h" struct std info student={"000102","张三","男",{1980,9,20}}; #include "stdio.h" #include "conio.h" void main() 成员运算符 printf("No:%sn",student.no); printf("Name:%s\n",student.name); printf("Sex:%sIn",student.sex); printf("Birthday:%d-%d-%d\n",student.birthday.year, student.birthday.month, student.birthday.day ); getch(); 2024/10/28 10
2024/10/28 10 #include "struct.h " struct std_info student ={"000102","张三","男",{1980,9,20} }; #include "stdio.h" #include "conio.h" void main( ) { printf("No: %s\n", student . no); printf("Name: %s\n", student . name); printf("Sex: %s\n", student . sex); printf("Birthday: %d-%d-%d\n", student.birthday. year, student.birthday. month, student.birthday. day ) ; getch(); } [案例10.1]中定义的结构体类型 成员运算符