C语言结构体详细讲解

发布于:2025-02-11 ⋅ 阅读:(34) ⋅ 点赞:(0)

一、前言

   在学习结构体之前,讲讲为什么会专门写一章博客来分享这个知识点;首先在写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;

结尾

   Although the road is far,the line is comming,Hard as it is,it will be done.