1.结论:结构体的大小=结构体中各各变量的大小之和
2 这个是一个结构体
typedef struct {
int* array;
int size;
}Array;
3.让我们用代码算算它有多大
Array a;
printf("这是个小测试\n");
printf("总大小=%d\n",sizeof(a));
printf("int*=%d\n",sizeof(int*));
printf("int=%d\n",sizeof(int));
printf("????????\n");
3.运行结果
好尴尬,错掉了。。。。。。
4+8=12 而结构体是的大小是16个字节
4 找原因
计算结构体大小的规则:
1.每一个成员的偏移量都必须是该成员的倍数。
2.结构体的大小必须是该结构体字节数最大成员的倍数。
5.所以
(1)根据规则1,第2个数据(int)的偏移量应该是它自己个的倍数,很好,8,刚刚好是它的倍数
(2)根据规则2,最大的数据是int*,所以结构体的大小因该是它(8)的倍数,而12不是8的倍数,给结构体更大的空间,16刚好是int*的2倍。
over
参考的博客:https://www.cnblogs.com/smile-812/p/7897187.html
这个作者比我说的详细