结构体的自引用:
例如有这样的代码
struct student{
char name[1024];
int age;
struct student a;
};
此时我们编译执行后,程序会报错(a使用未定义的struct student),原因很好分析,例如我们想求这个结构体的所占字节大小,student 占的字节就是 char[1024]+int+student ,此时student又是不知道的,就会返回一个死循环。
但如果需要自引用本身结构体,只需要在第四行做一下改动
struct student{
char name[1024];
int age;
struct student* a;
};
因为我们直到指针变量都是四个字节,这样就可以确定所占内存空间大小。
结构体内存对齐:
我们先看代码
typedef struct Test{
char a;
int b;
int c;
}Test;
int main(){
Test t;
printf("%p\n", &t);
printf("%p\n", &t.a);
printf("%p\n", &t.b);
printf("%p\n", &t.c);
printf("%d\n", sizeof(t));
system("pause");
return 0;
}