前言——————希望现在在努力的各位都能感动以后享受成功的自己!
今天我们来了解了解一下结构体,结构体又有什么奥妙呢,废话不多说,何为结构体呢?------->结构是⼀些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。
结构体的声明
结构体如何声明呢?我们先看一下官方的格式。
那再看一下具体格式声明 是怎么样的。
像这样一个简单学生基本信息我们就可以完成了简单的声明。
需要注意的是结构体的声明并不会向内存申请空间,只有初始化后才会向内存申请空间。
结构体的初始化
结构体如何初始化呢?我们继续往下看
这里我说一种我经常用的初始化方式,即需要初始化结构体时我们可以像上面代码一样,
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更优,因为函数传参的时候,参数是需要压栈,会有时间和空间上的系统开销。 如果传递⼀个结构体对象的时候,结构体过大·,参数压栈的的系统开销比较大·,所以会导致性能的下 降。所以我们选择指针的方式传参会更优。
今天文章到此为止。希望多多支持。