1.声明
![](https://i-blog.csdnimg.cn/blog_migrate/6e4cb55aea9aa510660f2ed4a275c341.png)
eg:
![](https://i-blog.csdnimg.cn/blog_migrate/cf8d3f1e30cb96214943d93cad627eec.png)
一定情况下,标签名也可以省略
2.自引用
正确的使用方法
![](https://i-blog.csdnimg.cn/blog_migrate/e3e46c2c0fddb691f36dbeb72c8e67cd.png)
![](https://i-blog.csdnimg.cn/blog_migrate/55b5ac9b9bee036bfd03c2418ba0790b.png)
通过解引用符号来正确使用,错误的方法常常漏掉解引用符号
3.定义和初始化
![](https://i-blog.csdnimg.cn/blog_migrate/7583445c476417950e0bfe351e7959d1.png)
4.内存对齐
下面我们先看个例子
![](https://i-blog.csdnimg.cn/blog_migrate/2c8b0a60d39bf716d2526a3ee367e0b6.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8ba142cd6ab5d9f449164d0df08eb7e3.png)
那它为什么是12呢?别急,咱们一步步看下去
首先,咱们要熟悉熟悉结构体的对齐规则
![](https://i-blog.csdnimg.cn/blog_migrate/c78a33c6da19c4abe561da3d57b9ff43.png)
第一点,这里int是四个字节,所以从0开始,一直到3,这是a所占的,b c一样
第二点,int a 4 8 4 char b 1 8 1 int c 4 8 4 比较,取较小值
第三点,然后要从整数倍开始,4是1的倍数,所以b就从这里
然后 8是4的倍数 c就从这里往下数四个然后
12为最大对齐数的整数倍,所以符合(最大对齐数为4)
![](https://i-blog.csdnimg.cn/blog_migrate/e8d98d7fcbfe3d8435e0363ee93fb8f3.png)
所以,答案就为12
特别说明嵌套的话就看最大对齐数,然后依次往下数,就比如我上面举例的这个从4的整数倍往下数12个
5.传参
![](https://i-blog.csdnimg.cn/blog_migrate/3c4a16324d4c411bc982a9c70a969ecc.png)
print1与print2相比,首选print2。
因为函数传参是需要参数压栈会有时间和空间上的系统开销
如果传递一个结构体对象的时候,结构体过大,参数压栈的系统开销比较大,会导致性能下降
所以,结构体传参时要传结构体地址