内容正文:
第八章 复杂数据类型--结构体与共用体
1
CONTENTS
目录
01
02
结构体变量定义、初始化及应用
结构体的认知
03
结构体数组及应用
04
共用体及其应用
C语言
知识树
My First Template
1、结构体的认知
C语言程序设计
4
C语言
C语言程序设计 结构体及其应用
知识回顾
数据类型 占用空间 取值范围
short[int] 16位(2个字节) -32768~32767(-215~215-1)
int 32位(4个字节) -2147483648~2147483647(-231~231-1)
long[int] 32位(4个字节) -2147483648~2147483647(-231~231-1)
unsigned short[int] 16位(2个字节) 0~65535(0~216-1)
unsigned int 32位(4个字节) 0~4294967295(0~232-1)
unsigned long[int] 32位(4个字节) 0~4294967295(0~232-1)
char 8位(1个字节) -128~127(-27~27-1)
float 32位(4个字节) 1.2×10-38~3.4×1038
double 64位(8个字节) 2.3×10-308~1.7×10308
int a;
float b,c;
My First Template
C语言
任务回顾
C语言程序设计 结构体及其应用
存储全班50个学生的成绩,并计算平均分。
a[0] a[49]
89 56 78 60 76 …… 99 90
My First Template
C语言
问题:存储一个班级中 5 名学员的信息(学号、姓名、性别和成绩)
I. 使用数组
Mary
John
Peter
Rose
Kate
F
M
F
M
F
01
02
03
04
05
89
78.5
67
97.5
64
解决方案:
score
num
sex
name
不能建立数组间的关系
II. 使用多维数组
Mary
John
Peter
Rose
Kate
F
M
F
M
F
01
02
03
04
05
89
78.5
67
97.5
64
C 语言不允许一个数组包含多种数据类型
III. 使用结构体
num
name
sex
score
C 语言引入了称为结构体的数据存储方式
“结构体” 是一种构造数据类型
C语言程序设计 结构体及其应用
My First Template
结构体的定义
01
C语言
结构体是一种构造数据类型
用途:把不同类型的数据组合成一个整体-------自定义数据类型
结构体类型定义
struct [结构体名]
{
类型标识符 成员名;
类型标识符 成员名;
…………….
};
成员类型可以是
基本型或构造型
struct是关键字,
不能省略
合法标识符
可省:无名结构体
结构体
C语言程序设计 结构体及其应用
My First Template
C语言
例 struct student
{ int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
};
name
num
sex
age
score
addr
4字节
2字节
20字节
1字节
4字节
30字节
…
…..
结构体类型定义描述结构
的组织形式,不分配内存
例子图解
C语言程序设计 结构体及其应用
声明一个类型为 student 结构的变量时,将会为该变量分配内存,大小是大于或等于其所有成员变量的大小之和
My First Template
C语言
总结:
结构体与基本类型(int,char,float等)不同,基本类型是系统提供的标准类型,可以直接拿来定义变量,而结构体必须先定义一个结构体类型,再用它定义变量。
结构体类型定义使用的struct关键字开头,并且不能省略
定义好一个结构体类型后,系统并不会分配一块内存单元用来存放各个数据成员,而是编译系统声明,这是一个“结构体类型”,由哪些类型的成员构成,并把它们当作一个整体来处理。
C语言程序设计 结构体及其应用
My First Template
2、结构体变量的定义、初始化与引用
C语言程序设计
12
C语言程序设计 结构体及其应用
C语言
为什么要使用结构体?
结构体是什么?
My First Template
C语言
结构体是一种构造数据类型
用途:把不同类型的数据组合成一个整体-------自定义数据类型
结构体类型定义
struct [结构体名]
{
类型标识符 成员名;
类型标识符 成员名;
…………….
};
成员类型可以是
基本型或构造型
struct是关键字,
不能省略
合法标识符
可省:无名结构体
结构体
C语言程序设计 结构体及其应用
My First Template
CONTENTS
内容
01
结构体变量的定义
02
03
结构体变量的初始化
结构体变量的引用
15
结构体变量的定义
01
C语言
先定义结构体类型,再定义结构体变量
一般形式:
struct 结构体名
{
类型标识符 成员名;
类型标识符 成员名;
…………….
};
struct 结构体名 变量名表列;
结构体变量的定义
C语言程序设计 结构体及其应用
例 struct student
{ int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
};
struct student stu1,stu2;
My First Template
C语言
一般形式:
struct 结构体名
{
类型标识符 成员名;
类型标识符 成员名;
…………….
}变量名表列;
例 struct student
{ int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
}stu1,stu2;
定义结构体的同时定义结构体变量
C语言程序设计 结构体及其应用
My First Template
C语言
一般形式:
struct
{
类型标识符 成员名;
类型标识符 成员名;
…………….
}变量名表列;
例 struct
{ int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
}stu1,stu2;
用无名结构体直接定义
变量只能一次
直接定义结构体变量
C语言程序设计 结构体及其应用
My First Template
结构体变量的初始化
02
C语言
形式一:
struct 结构体名
{
类型标识符 成员名;
类型标识符 成员名;
…………….
};
struct 结构体名 结构体变量={初始数据};
例 struct student
{ int num;
char name[20];
char sex;
int age;
char addr[30];
};
struct student stu1={112,“Wang Lin”,‘M’,19, “200 Beijing Road”};
结构体变量的初始化
C语言程序设计 结构体及其应用
My First Template
C语言
struct 结构体名
{
类型标识符 成员名;
类型标识符 成员名;
…………….
}结构体变量={初始数据};
例 struct student
{ int num;
char name[20];
char sex;
int age;
char addr[30];
}stu1={112,“Wang Lin”,‘M’,19, “200 Beijing Road”};
形式二:
结构体变量的初始化
C语言程序设计 结构体及其应用
My First Template
C语言
struct
{
类型标识符 成员名;
类型标识符 成员名;
…………….
}结构体变量={初始数据};
例 struct
{ int num;
char name[20];
char sex;
int age;
char addr[30];
}stu1={112,“Wang Lin”,‘M’,19, “200 Beijing Road”};
形式三:
结构体变量的初始化
C语言程序设计 结构体及其应用
My First Template
结构体变量的引用
03
C语言
引用规则
结构体变量不能整体引用,只能引用变量成员
成员(分量)运算符
优先级: 1
结合性:从左向右
引用方式: 结构体变量名.成员名
结构体变量的引用
C语言程序设计 结构体及其应用
struct{
int num;
int age;
char name[20];
char sex;
}stu1,stu2;
printf("%s
",stu1)
scanf("%d, %d %s,%c",&stu1)
stu1.age=20;
stu1.sex='F'
strcpy(stu1.name,"wang");
scanf("%d",&stu1.age)
My First Template
C语言
可以将一个结构体变量赋值给另一个结构体变量
结构体变量的引用
C语言程序设计 结构体及其应用
struct{
int num;
int age;
char name[20];
char sex;
}stu1,stu2;
stu1=stu2
stu1.num=stu2.num;
stu1.age=stu2.age;
strcpy(stu1.name,stu2.name);
stu1.sex=stu2.sex
相当于
My First Template
C语言
struct date
{
int month;
int day;
int year;
};
struct{
int num;
char name[20];
char sex;
struct date birthday;
float score;
}student1,student2;
表示结构变量成员的一般形式是:结构变量名.成员名
例如:student1.num、student2.sex、student1.birthday.month
嵌套结构
C语言程序设计 结构体及其应用
结构体嵌套时逐级引用
My First Template
C语言
结构体类型与结构体变量概念不同
类型:不分配内存; 变量:分配内存
类型:不能赋值、存取、运算; 变量:可以
结构体可嵌套
结构体成员名与程序中变量名可相同,不会混淆
C语言程序设计 结构体及其应用
My First Template
$$