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


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


目录
相关文章
|
数据库
ABAP include structure 的一个具体用法
ABAP include structure 的一个具体用法
|
C语言
struct结构体初识
struct结构体初识
52 0
|
存储 编译器 C语言
11、struct 结构
11、struct 结构
102 0
|
SQL 机器学习/深度学习 存储
structure_介绍_对比 | 学习笔记
快速学习 structure_介绍_对比
structure_介绍_对比 | 学习笔记
error C2375: “WSACleanup”: 重定义 C2011 “sockaddr_in”:“struct”类型重定义
error C2375: “WSACleanup”: 重定义 C2011 “sockaddr_in”:“struct”类型重定义
658 0
error C2375: “WSACleanup”: 重定义 C2011 “sockaddr_in”:“struct”类型重定义
|
C语言 C++ 编译器
flexible array柔性数组、不定长的数据结构Struct详解
柔性数组,这个名词对我来说算是比较新颖的,在学习跳跃表的实现时看到的。这么好听的名字,的背后到底是如何的优雅。 柔性数组,其名称的独特和迷惑之处在于“柔性”这个词。在C/C++中定义数组,是一个定长的数据结构,最常用的定义如下 int arr[100]; 上述代码的中arr数组的长度已知,我们把上面的语句称之为声明语句,因为在编译期数组的长度已经确定了,我暂且发明了一个词来称呼这类数组——“刚性”数组(声明,这个词是我臆想的,是不存在这种说法的)。
2216 0