🖼️前言
无论是整型、实型还是我们的数组,它们都只能描述单一对象,无法对一个复杂对象进行描述,比如我们的学生信息,包含学生姓名(字符型数组)、学号(整型)、电话号码(整型数组)等,将需要的信息整合在一起,配合上结构体关键字(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; }
🖼️总结
结构体初阶的指针非常简单,无非就是怎样声明和使用,以及注意结构体传参的时候传址就行了,当我们想要描述一个复杂对象时,可以用结构体试试,跟指针一样,属于一用就离不开系列。
如果你觉得本文写的还不错的话,期待留下一个小小的赞👍,你的支持是我分享的最大动力!
如果本文有不足或错误的地方,随时欢迎指出,我会在第一时间改正!