C语言初阶——结构体

简介: 无论是整型、实型还是我们的数组,它们都只能描述单一对象,无法对一个复杂对象进行描述,比如我们的学生信息,包含学生姓名(字符型数组)、学号(整型)、电话号码(整型数组)等,将需要的信息整合在一起,配合上结构体关键字(struct),这样我们就得到了一个结构体变量。合理使用结构体变量能让我们对现实世界中的信息做出更好的描述。一起看看结构体吧!🎉🎉🎉

🖼️前言


 无论是整型、实型还是我们的数组,它们都只能描述单一对象,无法对一个复杂对象进行描述,比如我们的学生信息,包含学生姓名(字符型数组)、学号(整型)、电话号码(整型数组)等,将需要的信息整合在一起,配合上结构体关键字(struct),这样我们就得到了一个结构体变量。合理使用结构体变量能让我们对现实世界中的信息做出更好的描述。一起看看结构体吧!🎉🎉🎉

783c01138ab689db281fc38ce4b0763.png

🖼️正文


结构体既然是一个能描述复杂对像的工具,那肯定又属于自己的形式,甚至少不了声明。我们可以把结构体当作一个函数来使用,声明、定义、初始化、传参样样齐全。


🎨声明


主要是声明结构体内部的变量有哪些、是何种类型、数组大小为多少

b41798ef7184f95bdd507255840ea9a.png

🎨成员类型


结构体内部成员变量可以是很多种类型

768b85d8ad4fcf09af3d7c4aa8d627d.png


🎨定义及初始化


结构体定义很简单,前面已经间接展示过了,也就是将声明与成员变量结合在一起

8c35a4cb094bd2a65e0e7f09ac21407.png

结构体初始化本质上是将类型匹配的数据存入结构体变量中

11d7c1c5838b6a0bab8db4b33823add.png

//结构体定义
struct stu
{
  char name[10];//姓名
  int ID;//学号
  char num[15];//电话
}a;//声明类型的同时定义变量 a
int main()
{
  struct stu a = { "张三",12345678,"1234567891011" };
  return 0;
}

🎨成员访问


当我们的数据存入结构体后想使用怎么办呢?总不能像数组一样利用下标吧。当然不是,结构体有自己的操作符---成员访问操作符 .  以及指针版的 -> ,都能很好的访问到结构体成员。


🎨结构体变量版


这里我们先使用成员访问操作符 . 一个不起眼的点,配合成员名即可

533e74404d1587a78230f993c51b699.png

//结构体访问
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;
}

🎨结构体指针版


指针是万能的,我们的结构体也有属于自己的指针,称为结构体指针

ad51617af246198c10f9edd70bf9a8a.png

//结构体访问
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;
}

🎨结构体传参


在某些函数中可能会用到结构体变量,此时就需要进行结构体传参,结构体传参有两种方式:传值和传参。

在结构体传参时,最好传递地址。

f620b51b61e93b953e5a5ccd1dcea57.png

//结构体传值
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;
}

🖼️总结


 结构体初阶的指针非常简单,无非就是怎样声明和使用,以及注意结构体传参的时候传址就行了,当我们想要描述一个复杂对象时,可以用结构体试试,跟指针一样,属于一用就离不开系列。


 如果你觉得本文写的还不错的话,期待留下一个小小的赞👍,你的支持是我分享的最大动力!


 如果本文有不足或错误的地方,随时欢迎指出,我会在第一时间改正!


目录
相关文章
|
24天前
|
存储 C语言
如何在 C 语言中实现结构体的深拷贝
在C语言中实现结构体的深拷贝,需要手动分配内存并逐个复制成员变量,确保新结构体与原结构体完全独立,避免浅拷贝导致的数据共享问题。具体方法包括使用 `malloc` 分配内存和 `memcpy` 或手动赋值。
30 10
|
23天前
|
存储 大数据 编译器
C语言:结构体对齐规则
C语言中,结构体对齐规则是指编译器为了提高数据访问效率,会根据成员变量的类型对结构体中的成员进行内存对齐。通常遵循编译器默认的对齐方式或使用特定的对齐指令来优化结构体布局,以减少内存浪费并提升性能。
|
28天前
|
编译器 C语言
共用体和结构体在 C 语言中的优先级是怎样的
在C语言中,共用体(union)和结构体(struct)的优先级相同,它们都是用户自定义的数据类型,用于组合不同类型的数据。但是,共用体中的所有成员共享同一段内存,而结构体中的成员各自占用独立的内存空间。
|
28天前
|
存储 C语言
C语言:结构体与共用体的区别
C语言中,结构体(struct)和共用体(union)都用于组合不同类型的数据,但使用方式不同。结构体为每个成员分配独立的内存空间,而共用体的所有成员共享同一段内存,节省空间但需谨慎使用。
|
1月前
|
编译器 C语言 C++
C语言结构体
C语言结构体
25 5
|
1月前
|
编译器 Linux C语言
C语言 之 结构体超详细总结
C语言 之 结构体超详细总结
19 0
|
1月前
|
存储 编译器 Linux
深入C语言:探索结构体的奥秘
深入C语言:探索结构体的奥秘
|
1月前
|
存储 编译器 C语言
c语言回顾-结构体(2)(下)
c语言回顾-结构体(2)(下)
28 0
|
1月前
|
存储 编译器 程序员
c语言回顾-结构体(2)(上)
c语言回顾-结构体(2)(上)
28 0
|
1月前
|
存储 C语言
c语言回顾-结构体
c语言回顾-结构体
16 0