结构体(structure)的认识

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


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


结构体的声明

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

结构体(structure)的认识_第1张图片

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

结构体(structure)的认识_第2张图片

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

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

结构体的初始化 

结构体如何初始化呢?我们继续往下看     结构体(structure)的认识_第3张图片   

结构体(structure)的认识_第4张图片

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

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

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

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


结构体的特殊声明结构体(structure)的认识_第5张图片

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

那么这里引申出一个问题,再看一段代码结构体(structure)的认识_第6张图片

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


结构体的自引用

大家可先看一段代码:

struct  BL
{


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

};

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

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

那么正确的自引用是怎样的呢?结构体(structure)的认识_第7张图片

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


 结构体的传参

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

结构体(structure)的认识_第8张图片

结构体(structure)的认识_第9张图片 

结构体(structure)的认识_第10张图片

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

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


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

结构体(structure)的认识_第11张图片

你可能感兴趣的:(linux,运维,服务器)