📋 前言
🌈hello! 各位宝子们大家好啊,前面我们学完指针了就正式进入到结构体这一章节了。
⛳️结构体使我们自定义类型的一种,应用可以说非常广泛了。今天就给大家大家详细解析一下,结构的内容详解以及各种注意事项!
📚本期文章收录在 《C语言初阶》,大家有兴趣可以看看呐!
⛺️ 欢迎铁汁们 ✔️ 点赞 👍 收藏 ⭐留言 📝!
1 . 什么是结构体
⛳️ 关于结构体我们可以这样理解,数组是一些相同元素的集合,那么结构体就是不同类型值的的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。
- 所以说结构体是一些值的集合
- 这些值称为成员变量
- 每个成员可以是不同类型的变量
1.1 结构的定义
那么结构体该如何定义呢?结构体其实就和 int 整形是一模一样的,结构体也是一个类型。想定义一个结构体变量首先需要先声明这个结构的类型成员是那些!
- 结构体的声明关键字:
struct
- 下面我们就来看一下结构体是如何声明的吧!
1.2 结构的声明
📚 结构体的语法形式:
struct tag { member - list; }variable - list;
结构体的关键字是
struct
后面跟的tag
是 结构体的标签名,可以自定义。我们也根据实际情况自定义!
member - list
大括号里面需要的就是我们成员列表了- 为什么叫成员列表,因为结构体里面可以一个或多个不同类型的成员
variable - list
这个是变量列表的意思
可能各位,铁汁还是不明白。我们来看一下实际例子大家就明白了!例如描述一个学生:
- 学生那就需要
姓名
年龄
性别
和学号
- 而结构体刚好可以满足不同类型的变量
📚 代码演示:
struct Stu { char name[20];//名字 int age;//年龄 char sex[5];//性别 char id[20];//学号 }; //分号不能丢
总结:
- 结构体定义需要,结构体关键字,结构体标签名。
- 成员变量的类型和名字
- 和结构体后面的分号。
2.结构体初始化
2.1 用标签名定义和初始化
结构体类型的声明和定义都回了。那么一个结构体类型我们该怎么创建一个结构体的变量呢?答案是使用结构体的标签名用来定义结构体变量,或者在创建结构体的时候直接在后面跟上结构体变量
- 在声明结构体是创建的结构体变量是 全局变量
- 在大括号里面创建的结构体是 局部变量
📚 代码演示:
struct Point { int x; int y; }p1; //声明类型的同时定义变量p1 //全局变量 int main() { struct Point p2;//直接使用标签名定义 //局部变量 return 0; }
而初始化的话也非常简单和数组是差不多的每个成员赋值用大括号扩起来,单引号隔开就好了!
- 大括号括起来,后面加引号
- 每个成员逗号隔开
📚 代码演示:
struct Point { int x; int y; }p1 = { 2, 1 };//创建时直接赋值 int main() { struct Point p2 = {12,13};//直接使用标签名定义 //然后进行赋值 return 0; }
2.2 typedef 的结构体定义
这时候大家就会发现诶呀!结构体的变量的定义也太麻烦了吧!还要写结构体的关键字和标签名一点也不简便!那么有没有简便的方法呢!这时候就需要用到 typedef 重命名关键字来重新定义结构体名称了!
- 使用 typedef 重命名结构体后,结构体大括号后面跟的第一个变量就是结构体重命名后的类型名!。
- 而我们想要在定义的话只需要写出重命名之火后的类型名就好了非常便捷!。
📚 代码演示:
#include <stdio.h> typedef struct Point { int x; int y; }Pt;//重定义后的类型名 int main() { Pt p2 = { 12,13 };//typedef重定义类型名定义 //结构体变量然后进行赋值 return 0; }
📑 代码结果:
2.3 typedef 的结构体初始化
typedef
的结构体初始化和标签名初始化一模一样但是,不能和标签名一样在结构体类型的最后一行直接创建结构体变量和初始化了。
- typedef 重命名了,在声明后面就不能再创建我们的结构体变量了。
- 因为typedef 的定义结构体后面默认跟的是重命名的类型名。
📚 代码演示:
#include <stdio.h> typedef struct Stu { char name[20];//姓名 int age;//年龄 char sex[5];//性别 char id[20];//学号 }Stu; //全局变量 Stu p1 = { .id = "20202356",.age = 18, .name = "lisi",.sex = "nan" }; int main() { printf("姓名\t年龄\t性别\t学号\n"); //局部变量 Stu p2 = { .id = "202329",.age = 20, .name = "zhangsan",.sex = "nan" }; printf("%-10s\t %d\t %s\t %s\n", p1.name, p1.age, p1.sex, p1.id); printf("%-10s\t %d\t %s\t %s\t", p2.name, p2.age, p2.sex, p2.id); return 0; }
📑 代码结果: