目录
前言:
1.结构体的定义
2.结构体的使用
3.易错点
4.思维导图
前言:
变量只能表示单一的属性,比如用int
去表示一个年龄,用float
去表示一个身高或一个体重,一个字符串/字符数组
去表示一个性别或一个名字。
int tony_age = 18;
float tony_height = 172.0;
float tony_weight = 74.0;
而真实世界里面的事物往往有多个属性。比如一个人它既有年龄,身高,体重,也有名字,性别,
在C语言中我们使用一种特殊的数据结构来表示它,它就叫做struct
(结构体)。
1.结构体的定义
1.1
truct
又叫结构,或者结构体,往往包含多个不同数据类型的变量。
下面我们来看一看一个struct
的定义:
struct People
{
char name[20];
int age;
float height;
float weight;
};
1.struct关键字,声明这是一个struct结构体
struct
2.struct名,又叫结构名
People
3.struct中的第一个成员,一个字符数组name
char name[20];
4.struct中的第二个成员,一个整型变量int
int age;
struct People
{
char name[20];
int age;
float height;
float weight;
};
5.struct中的第三个成员,一个浮点型变量height
float height;
6.struct中的第四个成员,一个浮点型变量weight
float weight;
7.结构中的成员需要用花括号{}括起来
{
}
1.2
我们来自己定义一个结构体Book,它有三个成员,字符数组name,整型页数pages,浮点型价格price。
struct Book
{
char name[20];
int pages;
float price;
};
1.先填入结构体关键字struct
2.再填入结构体的名字Book
:
3.然后填入花括号{}
:
4.分别填入三个不同成员的数据类型:
定义了一个struct
结构体以后,我们就可以用它来定义一个结构体变量,这个结构体变量的数据类型当然就是这个我们定义好的struct
了。
1.3
我们来看看如何定义一个结构体变量:
struct People
{
char name[20];
int age;
float height;
float weight;
};
struct People people_a;
struct People people_b;
1.结构体的定义
struct People { }
2.用结构体People声明一个变量people_a
3.声明变量也需要用到结构体关键字struct
4.结构体的名字People
5.用结构体People声明的变量people_b
1.4
我们也可以使用下面的方式来定义一个结构体变量,在结构体的末尾加上变量的名字。但我们还是推荐上面这种,代码更清晰,理解成本也会更低一点。
struct Book
{
char name[20];
int pages;
float price;
} book_a;
1.5
完成结构体和结构体变量的定义以后,我们就可以开始对它进行赋值和使用。
首先是赋值:
struct People
{
char name[20];
int age;
float height;
float weight;
};
struct People people_a;
people_a = {"Liming", 19, 178.0, 75.0};
1.结构体的定义
struct People{}
2.用定义好的结构体People来声明一个变量people_a
struct People people_a;
3.给变量进行赋值
people_a = {"Liming", 19, 178.0, 75.0};
struct People
{
char name[20];
int age;
float height;
float weight;
};
struct People people_a;
people_a = {"Liming", 19, 178.0, 75.0};
4.第一个给变量name赋值"Liming"
5.第二个给变量age赋值19
6.第三个给变量height赋值178.0
7.第四个给变量weight赋值75.0
1.6
需要注意的是,我们是给struct的成员按照顺序,挨个赋值的。
struct Book
{
char name[20];
int pages;
float price;
};
struct Book book_a;
book_a
book_a = {"ABC", 100, 15.0};
1.我们来给结构体Book定义的变量进行一次赋值,注意对应的顺序,先填入变量名book_a
:
代码编辑器。
2.然后填入赋值符号=
和花括号{}
:
3.依次填入三个结构体成员变量的数值,第一个是"ABC",注意数据类型的对应:
4.然后是pages的值,100:
5.最后是浮点变量price的值15.0:
到这里我们就完成了一个结构体的定义,结构体变量的声明,和结构体变量的赋值了。
2.结构体的使用
2.1
前面我们更多在讲解语法细节上面。需要注意的是,struct的定义需要在main函数前面(外部),就像函数的定义一样。
除了一次性给全部结构体成员进行赋值以外,我们也可以根据需要给单个结构体变量进行赋值。
2.2
这是一个期末考试成绩单的结构体Record
,我们来给它单个成员进行赋值:
struct Record
{
float yuwen;
float shuxue;
float yingyu;
};
int main() {
struct Record record_2023;
record_2023.yuwen = 99.5;
record_2023.shuxue = 100.0;
record_2023.yingyu = 98.5;
}
1.定义结构体Record
struct Record{}
2.声明一个结构体变量record_2023
struct Record record_2023;
3.给结构体成员变量yuwen赋值99.5
record_2023.yuwen = 99.5;
struct Record
{
float yuwen;
float shuxue;
float yingyu;
};
int main() {
struct Record record_2023;
record_2023.yuwen = 99.5;
record_2023.shuxue = 100.0;
record_2023.yingyu = 98.5;
}
4.给结构体成员变量shuxue赋值100.0
record_2023.shuxue = 100.0;
5.给结构体成员变量yingyu赋值98.5
ecord_2023.yingyu = 98.5;
6.main函数,结构体的定义需要放在main函数以外
int main () {}
7.我们注意到它的访问方式是通过点.来实现的
2.3
结构体变量访问自己成员是通过英文句号.
来实现的:
record_2023.yuwen = 99.5;
对结构体里面单个成员变量进行赋值和访问的方式都是一样的,通过英文符号.
来实现
2.4
struct Record
{
float yuwen;
float shuxue;
float yingyu;
};
int main() {
struct Record record_2025 = {90.0, 93.5, 98.0};
printf("%.1f\n", record_2025.yuwen);
printf("%.1f\n", record_2025.shuxue);
printf("%.1f\n", record_2025.yingyu);
}
1.定义一个结构体Record
struct Record { };
2.定义一个结构体变量,并进行初始化赋值
struct Record record_2025 = {90.0, 93.5, 98.0};
3.打印输出这个结构体变量的三个数值
printf("%.1f\n", record_2025.yuwen);
printf("%.1f\n", record_2025.shuxue);
printf("%.1f\n", record_2025.yingyu);
4.同样的,我们通过英语句号.来访问结构体的成员
2.5
指针,作为C语言最灵活的机制(有人也说指针是C语言的精髓所在),也可以用来指向一个结构体,我们来看看:
定义一个某种结构体的指针,并指向一个变量,然后访问它:
struct Record
{
float yuwen;
float shuxue;
float yingyu;
};
int main() {
struct Record record_2025 = {90.0, 93.5, 98.0};
struct Record *sp1;
sp1 = &record_2025;
printf("%f\n", sp1->yuwen);
sp1->yuwen = 100.0;
printf("%f\n", sp1->yuwen);
}
1.定义一个Record结构的指针
struct Record *sp1;
2.把指针指向结构体变量record_2025
sp1 = &record_2025;
3.打印结构体变量yunwen
printf("%f\n", sp1->yuwen);
4.指针去访问一个结构体成员使用->符号
5.以及对于结构体来说,不需要使用指针运算符*
sp1->yuwen
2.6
一个结构体的指针和一个普通变量的指针,在使用上最大的区别就是,普通变量的指针需要使用指针运算符*
来访问,结构体的指针则不需要。
使用结构体变量访问成员的时候,是用英文句号.
使用结构体指针来访问成员的时候,是用减号+右箭头符号->
2.7
我们自己来写一遍用结构体指针访问成员的代码
struct Record record_2025 = {90.0, 93.5, 98.0};
struct Record *sp1;
sp1 = &record_2025;
printf("%.1f\n", sp1->yuwen);
sp1->yuwen = 100.0;
printf("%.1f\n", sp1->yuwen);
1.填入结构体指针访问成员的符号->
:
2.填入指针访问成员的代码:
sp1->yuwen
3.易错点
结构体定义和声明后面记得不要丢掉分号!
输出每个结构体成员时应该对应该类型的格式符。
4.思维导图
最后我想说的是:
在撰写这篇文章时,我参考了《白纸编程》这个app的观点和思想,我要感谢他们对我的启发和帮助。