C语言结构体详细讲解
文章目录
- @[TOC]
- 一、前言
- 二、结构体
- 2.1 结构体概念🎈
- 2.2 结构体定义🎉
- 2.3 结构体使用🎗️
- 2.4 结构体数组使用🎗️
- 结尾 时间紧后面还有一些知识点这周内补上, 理解理解!(❁´◡`❁)
文章目录
- @[TOC]
- 一、前言
- 二、结构体
- 2.1 结构体概念🎈
- 2.2 结构体定义🎉
- 2.3 结构体使用🎗️
- 2.4 结构体数组使用🎗️
- 结尾 时间紧后面还有一些知识点这周内补上, 理解理解!(❁´◡`❁)
一、前言
在学习结构体之前,讲讲为什么会专门写一章博客来分享这个知识点;首先在写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 数据类型 类型名字
通俗一点说: 就是给人家换了一个名字
myType2 *name; myType2 类型的数据大小,我们通过 myType2 *name;指针大小就可以了,这个指针会帮我们找到下一个数据的位置.
这个看懂之后我们就需要往后面学习了,我们不可能只是定义结构体而不去使用它,因此接下来学习结构体使用⬇️
2.3 结构体使用🎗️
注意: 使用之前结构体我们先要对结构体变量进行声明一个结构体变量,怎么做?
//结构体变量声明
struct 结构体标签或者变量名 自己定义一个新的名字;
egOne://这些代码结合上面的代码一起来看struct Student student; //这就是声明一个Student类型的student变量;
知道怎么做了,接下来就是实际上手操作!
先来一个结构体赋值:
使用方法:(直接用声明的结构体变量直接--->点 )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 Node {ElemType data;struct Node *next;
};Node *newNode = (Node *)malloc(sizeof(newNode));
newNode->data=0;
newNode->next=NULL