一、前言
在学习结构体之前,讲讲为什么会专门写一章博客来分享这个知识点;首先在写C语言蓝桥杯的一些题目的时候,很多地方都会用到结构体,后台粉丝私信我说,出一期这个结构体的内容。于是,在当完牛马过后的我为了不让大家知识点有遗漏或者做题看不懂,加班加点的写了一篇关于结构体的知识点,话不多说,直接进入正题.
二、结构体
2.1 结构体概念🎈
结构体(Struct)是编程语言中一种用于封装不同类型数据的复合数据类型。它允许将多种相关的数据元素组合成一个单一的实体,形成一个逻辑上的整体。每个数据元素称为“成员”或“字段”,可以是不同的数据类型。
- 通俗来讲:
-
一个变量里面可以有很多不同的数据类型;
2.2 结构体定义🎉
结构体定义格式1:
struct 结构体标签{
datatype 变量名;
}结构体变量;
结构体定义例子:
struct Student{
int id; //定义一个存学号变量
char *name; //定义一个存名字变量
}stu;
结构体定义格式2:
struct 结构体标签{
datatype 变量名;
};
结构体定义例子:
struct Student{
int id; //定义一个存学号变量
char *name; //定义一个存名字变量
};
结构体定义格式3: (强烈推荐使用这个)
typedef struct {
datatype 变量名;
}结构体变量;
结构体定义例子:
typedef struct {
myType1 id;
myType2 *name;
}Student;
在明确怎么定义结构体之后,我们可以很容易看懂前两个列子,但是第三个用到了一个其他的例子,不要着急,结着往下面看:
typedef 数据类型 类型名字
通俗一点说: 就是给人家换了一个名字换了一个名字以后就直接可以使用别名去定义结构体变量
这个看懂之后我们就需要往后面学习了,我们不可能只是定义结构体而不去使用它,因此接下来学习结构体使用⬇️
2.3 结构体使用🎗️
注意: 使用之前结构体我们先要对结构体变量进行声明一个结构体变量,怎么做?
//结构体变量声明
struct 结构体标签或者变量名 自己定义一个新的名字;
egOne:
//这些代码结合上面的代码一起来看
struct Student student;
//这就是声明一个Student类型的student变量;
知道怎么做了,接下来就是实际上手操作!
先来一个结构体赋值:
直接看:
typedef struct {
ElemType id;
char *name;
}Stu;
//结构体方式 ->传递大小相同的结构体
void printDataOne(Stu stuOne){
printf("%d",stuOne.id);
printf("%s",stuOne.name);
}
//指针方式 ->只需要传递一个指针地址
void printDataTwo(Stu *stuTow){
printf("%d",stuTow->id);
printf("%s",stuTow->name);
}
//结构体
Stu stuOne={1001,"小猿"};
printDataOne(stuOne);
//结构体指针
Stu *stuTow ;
stuTow = &stuOne;
printDataTwo(stuTow);
使用方法:(直接用声明的结构体变量直接--->点 )
student.id = 202412;
student.name ="小猿";
为什么结构体会有两种访问方式?在函数传参(传值、传址)时,会生成临时变量,如果要传的结构体变量太大的话,传值拷贝出来的临时对象也会很大,如果用传地址的方式来传结构体变量地址的话,可以很好的节省空间。
看起来是不是很简单,直接点谁还不会对吧✨,这个呢就相当于我们在给结构体里面的变量输入值了。看到这,各位小伙伴能不能看懂呢(评论区见)。
在奖励一个输出::
使用方法:(直接用格式化输入输出即可 )
printf("id:%d name:%s\n",student.id,student.name);
看起来是不是很简单,输出学完了✨,接着就要上升Level了。
在奖励一个结构体指针赋值:
struct Student student;
struct Student *pStudent; //声明一个结构体变量
pStudent = &student; //取第一个声明结构体变量的地址
pStudent->id = 1002; //结构体赋值又变了:->
pStudent->name="结构";
printf("结构体: id:%d name:%s\n",student.id,student.name);
printf("结构体指针:id:%d name:%s\n",pStudent->id,pStudent->name);
学到这,我们就学习结构体的一些基本操作,同时也要明白结构体和结构体指针赋值的一种方式.多余的话就不多说了。
2.4 结构体数组使用🎗️
概念
不要被这个吓到了,其实就是普通变量,可以定义一个指针指向结构体,也可以定义结构体数组
结构体数组:
typedef struct {
ElemType id;
char name[10];
}StuTwo;
//结构体数组赋值
StuTwo stuTow1[3]={
1001,"小猿",1002,"小红"
}
return 0;