结构体(structure)的认识

简介: 本文介绍了结构体的基本概念,包括声明规则、初始化方法,特别关注了自引用的正确实践以及结构体传参时的效率问题,指出使用指针传递结构体以提高性能。

前言——————希望现在在努力的各位都能感动以后享受成功的自己!


今天我们来了解了解一下结构体,结构体又有什么奥妙呢,废话不多说,何为结构体呢?------->结构是⼀些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。

结构体的声明

结构体如何声明呢?我们先看一下官方的格式。


那再看一下具体格式声明 是怎么样的。

像这样一个简单学生基本信息我们就可以完成了简单的声明。

需要注意的是结构体的声明并不会向内存申请空间,只有初始化后才会向内存申请空间。


结构体的初始化

结构体如何初始化呢?我们继续往下看    


这里我说一种我经常用的初始化方式,即需要初始化结构体时我们可以像上面代码一样,

struct student  s ("s"为你自己取的变量名)。初始化时我们要按顺序来初始化结构体。

然后我们要把它们打印出来的时候,printf(”%s",只需变量名.结构体成员)。

即printf("age : %d ", s1.age);。


结构体的特殊声明

像上面代码所展示的便是 结构体的特殊声明------不完全声明。其省略了结构体标签 student,这便是不完全声明的结构体。


那么这里引申出一个问题,再看一段代码

这两个结构体都是不完全声明的结构体,那么假如我这样 使p=&a,那么各位大家觉得这样的代码合法吗?--------答案是不合法的。编译器会把上⾯的两个声明当成完全不同的两个类型,所以是非法的。 匿名的结构体类型,如果没有对结构体类型重命名的话,基本上只能使用一次。


结构体的自引用

大家可先看一段代码:

struct  BL
{
 
 
  struct next aa;
  int age;
  char sex[5];
  char name[6];
  char number[11];
 
};


大家觉得这合理吗?如果合理那么sizeof(struct BL) 的大小是多少呢?

仔细一想是不是觉得好像确实说不出它的大小,甚至会使结构体struct BL无穷大。


那么正确的自引用是怎样的呢?

这才是正确的结构体自引用,运用指针去接收。

结构体的传参

大家可以先看下面一段代码

大家可以观察看上面代码中两个函数print1 ,print2 哪个比较好。

答案是print2更优,因为函数传参的时候,参数是需要压栈,会有时间和空间上的系统开销。 如果传递⼀个结构体对象的时候,结构体过大·,参数压栈的的系统开销比较大·,所以会导致性能的下 降。所以我们选择指针的方式传参会更优。


今天文章到此为止。希望多多支持。 


目录
相关文章
|
存储 C语言
C 结构体
C 结构体。
35 0
|
6月前
|
存储 算法 C语言
c结构体
c结构体
34 1
|
6月前
|
C语言
使用结构体
C 语言实例 - 使用结构体。
124 4
|
机器学习/深度学习 存储 编译器
Day_16 结构体
Day_16 结构体
|
C语言
struct结构体初识
struct结构体初识
55 0
|
存储 编译器 Linux
结构体讲解
在我们记录和实现一个复杂的事务时,我们通常需要多种基本类型,比如在我们记录一个学生信息的时候,这个时候我们就需要整型来记录年龄,字符型记录名字和性别等等
99 0
|
SQL 机器学习/深度学习 存储
structure_介绍_对比 | 学习笔记
快速学习 structure_介绍_对比
structure_介绍_对比 | 学习笔记
error C2375: “WSACleanup”: 重定义 C2011 “sockaddr_in”:“struct”类型重定义
error C2375: “WSACleanup”: 重定义 C2011 “sockaddr_in”:“struct”类型重定义
672 0
error C2375: “WSACleanup”: 重定义 C2011 “sockaddr_in”:“struct”类型重定义