📌结构体的自引用
错误想法:不要认为结构体的自引用就是结构体里套一个自己的结构体名
比如下面代码:
struct student
{
char name[20];
int age;
struct student;
};
这种套娃是错的。
正确的做法应该是:套一个自己类型的那种指针
struct student
{
char name[20];
int age;
struct student* next;
};
int main()
{
struct student s1;
struct student s2;
s1.next = &s2;
return 0;
}
📌结构体内存对齐
你有没有想过一个结构体要占多大的内存空间呢 ?
举个栗子吧:看下面的代码:
#include<stdio.h>
struct s1
{
int a;
char c;
};
int main()
{
printf("%d\n", sizeof(struct s1));
return 0;
}
你觉得会输出多少?
你大概会回答:5。 但这个答案是错的。为什么? 这就牵扯到结构体内存的对齐了;
实际上这些结构体的数据在内存中存放的时候是要完成内存的对齐的;
什么? 你问为什么要对齐? 原因就是:对齐了可以提高代码运行的效率,但对齐会浪费内存,这其实是一种以牺牲内存空间的做法来换取较高的效率;
那是怎么对齐的呢?
假设下面是一个内存块;
![](https://img-blog.csdnimg.cn/img_convert/bd899c72632430be58db32caa193d9c6.png)