
第12章 结构体与共用体 第一节 结构体类型概述 一、结构体的概念及其定义: 1、 看一个例子: 每一个学生的可能有以下数据(属性): 学号、姓名、性别、年龄、成绩、家庭地址等。 所有这些数据都是和某一学生相联系。 (I)假如将其分别定为num,name,sex,age,score,addr这些简单 变量,则它们之间相互独立,难以反映其内在的联系。 (2)需要将不同类型的数据组合成一个整体,以便于统一引用。 也就是说,希望将其合并成一个组合项,在这个组合项中包含若 干个类型不同(当然也可以相同)的数据项。 跳转到第一页
跳转到第一页 第12章 结构体与共用体 第一节 结构体类型概述 一、结构体的概念及其定义: 1、 看一个例子: 每一个学生的可能有以下数据(属性): 学号、姓名、性别、年龄、成绩、家庭地址等。 所有这些数据都是和某一学生相联系 。 (1)假如将其分别定为num,name,sex,age,score,addr这些简单 变量,则它们之间相互独立,难以反映其内在的联系。 (2)需要将不同类型的数据组合成一个整体,以便于统一引用。 也就是说,希望将其合并成一个组合项,在这个组合项中包含若 干个类型不同(当然也可以相同)的数据项

2、结构体(structure.) C语言提供了这样一种数据结构,它相当于其它高级 语言中的“记录” num name sex age c score addr 10010 LiFun M 18 87.5 Beijing struct student int num; char name [20]; char sex; int age; float 。 score; char addr[30]; } 跳转到第一页
跳转到第一页 2、结构体(structure) C语言提供了这样一种数据结构,它相当于其它高级 语言中的“记录” 。 num name sex age c_score addr 10010 LiFun M 18 87.5 Beijing struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; };

struct student表示这是一个“结构体类型”, 它包括num,name,age,score,addr等不同类型的数据项 3、结构体类型定义的语法格式: struct结构体名 {类型标识符 成员名: } 花括号内是该结构体中的各个成员(或称分量),由 它们组成一个结构体。对各成员都应进行类型说明,即 结构体类型特点及注意事项: 定义一个结构体类型,系统并未为其分配内存单元。 跳转到第一页
跳转到第一页 struct student表示这是一个“结构体类型” , 它包括num,name,age,score,addr等不同类型的数据项 3、结构体类型定义的语法格式: struct 结构体名 {类型标识符 成员名; . }; 花括号内是该结构体中的各个成员(或称分量),由 它们组成一个结构体。对各成员都应进行类型说明,即 结构体类型特点及注意事项: 定义一个结构体类型,系统并未为其分配内存单元

第二节 结构体类型变量定义和引用 一、定义结构体类型变量的方法: 1、在定义结构体类型之后,把变量定义为该类型: struct student student1,str+ 2、在定义结构体类型的同时定义该: struct time +name,20个字节 int hour; int minute; →age,2个字节 →gender,2个字节 int second; →class,2个字节 →grade,2个字节 last,now,future; 跳转到第一页
跳转到第一页 第二节 结构体类型变量定义和引用 一、定义结构体类型变量的方法: 1、在定义结构体类型之后,把变量定义为该类型: struct student student1,student2; 2、在定义结构体类型的同时定义该类型变量: struct time { int hour; int minute; int second; }last,now,future;

struct int hour; int minute; int second; }last,now,future; 注意:(1)结构体变量具有结构体类型的特征。 (2)结构体可以嵌套。 num name birthday year month day 跳转到第一页
跳转到第一页 struct { int hour; int minute; int second; }last,now,future; 注意:(1)结构体变量具有结构体类型的特征。 (2)结构体可以嵌套。 num name birthday year month day

二、结构体类型变量的初始化: 类似于数组的初始化。 struct int hour; int minute; int second; }1ast={12,30,0}; 三、结构体类型变量的引用: 1、引用某一元素中的一个成员:(成员运算符) Last.hour=10;student [i].num=00622; 2、结构体变量间可以整体赋值stu[门=stu[i+1] 数组中的各元素之间可以相互赋值。a[叮=a[+] 跳转到第一页
跳转到第一页 二、结构体类型变量的初始化: 类似于数组的初始化。 struct { int hour; int minute; int second; }last={12,30,0}; 三、结构体类型变量的引用: 1、引用某一元素中的一个成员:(成员运算符) Last.hour=10; student[i].num=00622; 2、结构体变量间可以整体赋值 stu[i]=stu[i+1] 数组中的各元素之间可以相互赋值。 a[i]=a[i+1]

【例12.1】.用结构体类型变量存储学生的基本 信意,并输出。 #include struct student *定义结构体类型*/ char num [10]; 赋值 char name[20]; char sex[2]; float score; }; main() struct student stu1; gets(stu1.num); *输入数据*/ gets(stu1.name); gets(stu1.sex); scanf("%f",&stu1.score); printf("%s,%s,%s,%fn", stu1.num,stu1.name,stu1.sex,stu1.score); } 跳转到第一页
跳转到第一页 【例12.1】 用结构体类型变量存储学生的基本 信息,并输出。 #include struct student /*定义结构体类型*/ { char num[10]; char name[20]; char sex[2]; float score; }; main( ) { struct student stu1; gets(stu1.num); /*输入数据*/ gets(stu1.name); gets(stu1.sex); scanf("%f", &stu1.score); printf("%s,%s,%s,%f\n", stu1.num,stu1.name,stu1.sex,stu1.score); } 赋值

12.3结构体数组 一个学生的基本数据可以用一个结构体变量 来存储,而多个学生的基本数据侧可以用一个结 构体数组进行存储。 跳转到第一页
跳转到第一页 12.3 结构体数组 一个学生的基本数据可以用一个结构体变量 来存储,而多个学生的基本数据则可以用一个结 构体数组进行存储

一、 结构体数组的定义 例如 struct student char num[10]; char name[20]; char sex[2]; int age; }; struct student stu[2]; :stu是具有2个元素的结构体数组*/ 跳转到第一页
跳转到第一页 一、结构体数组的定义 例如 struct student { char num[10]; char name[20]; char sex[2]; int age; }; struct student stu[2]; /* stu是具有2个元素的结构体数组*/

二、 结构体数组的初始化 结构体数组可以在定义时赋初值。 例如: struct student { char num[10]; char name[20]; char sex[2]; int age; }; struct student stu[2]={K"1001","王鹏","男 ",18,"1002","李林","女",19} 跳转到第一页
跳转到第一页 二、结构体数组的初始化 结构体数组可以在定义时赋初值。 例如: struct student { char num[10]; char name[20]; char sex[2]; int age; }; struct student stu[2]={{ "1001", "王鹏","男 ",18},{"1002", "李林","女",19}};