无论是整型、实型还是我们的数组,它们都只能描述单一对象,无法对一个复杂对象进行描述,比如我们的学生信息,包含学生姓名(字符型数组)、学号(整型)、电话号码(整型数组)等,将需要的信息整合在一起,配合上结构体关键字(struct),这样我们就得到了一个结构体变量。合理使用结构体变量能让我们对现实世界中的信息做出更好的描述。一起看看结构体吧!🎉🎉🎉

结构体既然是一个能描述复杂对像的工具,那肯定又属于自己的形式,甚至少不了声明。我们可以把结构体当作一个函数来使用,声明、定义、初始化、传参样样齐全。
主要是声明结构体内部的变量有哪些、是何种类型、数组大小为多少

结构体内部成员变量可以是很多种类型

结构体定义很简单,前面已经间接展示过了,也就是将声明与成员变量结合在一起

结构体初始化本质上是将类型匹配的数据存入结构体变量中

//结构体定义
struct stu
{
char name[10];//姓名
int ID;//学号
char num[15];//电话
}a;//声明类型的同时定义变量 a
int main()
{
struct stu a = { "张三",12345678,"1234567891011" };
return 0;
}当我们的数据存入结构体后想使用怎么办呢?总不能像数组一样利用下标吧。当然不是,结构体有自己的操作符---成员访问操作符 . 以及指针版的 -> ,都能很好的访问到结构体成员。
这里我们先使用成员访问操作符 . 一个不起眼的点,配合成员名即可

//结构体访问
struct book
{
char name[10];//书名
char ID[20];//编号
float price;//价格
}a;//声明类型的同时定义变量 a
int main()
{
struct book a = { "初始C语言","09212345678",9.9f};//存入数据
printf("%s %s %.2lf\n", a.name, a.ID, a.price);
return 0;
}指针是万能的,我们的结构体也有属于自己的指针,称为结构体指针

//结构体访问
struct book
{
char name[10];//书名
char ID[20];//编号
float price;//价格
}a;//声明类型的同时定义变量 a
int main()
{
struct book a = { "初始C语言","09212345678",9.9f};//存入数据
struct book* pa = &a;//结构体指针指向结构体变量a
printf("%s %s %.2lf\n",pa->name,pa->ID,pa->price);
printf("结构体指针变量大小:%zu\n", sizeof(pa));
return 0;
}在某些函数中可能会用到结构体变量,此时就需要进行结构体传参,结构体传参有两种方式:传值和传参。 在结构体传参时,最好传递地址。

//结构体传值
struct book
{
char name[10];//书名
char ID[20];//编号
float price;//价格
}a;//声明类型的同时定义变量 a
void print1(struct book a)
{
printf("传值:%s %s %.2lf\n", a.name, a.ID, a.price);
}
void print2(struct book* pa)
{
printf("传址:%s %s %.2lf\n",pa->name,pa->ID,pa->price);
}
int main()
{
struct book a = { "初始C语言","09212345678",9.9f};//存入数据
struct book* pa = &a;//结构体指针指向结构体变量a
print1(a);//传值
print2(&a);//传址
return 0;
}结构体初阶的指针非常简单,无非就是怎样声明和使用,以及注意结构体传参的时候传址就行了,当我们想要描述一个复杂对象时,可以用结构体试试,跟指针一样,属于一用就离不开系列。
如果你觉得本文写的还不错的话,期待留下一个小小的赞👍,你的支持是我分享的最大动力!