结构体【内存变量字节大小】问题
知识点:结构体大小、内存对齐
各数据类型所占用的字节数大小
那么给出以下程序 ~大家猜一猜看结果是什么呢?
#include<stdio.h>
struct A
{
char a;//char型 1字节
int b;//int型 4字节
};
int main()
{
printf("%d\n",sizeof(struct A));
return 0;
}
是不是看上去感觉是char的1字节加上int的4字节,然而运行结果如下:
这是什么原因呢???请看下图ヾ(✿゚▽゚)ノ
为了使程序更加方便的运行,系统选择舍弃3个格子的内存,以方便计算!所以应该是1+3(多的3个格子)+4
在多给几个例子深化一下理解呀!
#include<stdio.h>
struct A
{
char a;//char型 1字节+3
int b;//int型 4字节
};
struct B
{
char a;//1+1
short b;//2
int c;//4
};
struct C
{
short a;//2
char b;//1+1
int c;//4
};
struct D
{
char a;//1+1
short b;//2
char c;//1
int d;
};
int main()
{
printf("%d\n",sizeof(struct A));
printf("%d\n",sizeof(struct B));
printf("%d\n",sizeof(struct C));
printf("%d\n",sizeof(struct D));
return 0;
}
运行结果截图~有没有做对呀(๑╹◡╹)ノ"""
规则总结:
上面类型的字节数为下面一个的倍数才行
可参考以下图解,方便理解记忆
但是下面这种情况又有所不同啦><
struct E
{
char a;//1+3
int b;//4
short c;//2+2
};
若按照以上的规律,应该是10字节,但是运行结果却是12字节这就要了解到如下规律啦:
假如下面的数据类型所占的字节数比上面的小,应该补齐
再来一个例子呀
struct I
{
int a;//4
struct II
{
char b;//1+3
int c;//4
}d;//整体以4对齐
};
总结一下:
①上面类型的字节数为下面一个的倍数才行
②假如下面的数据类型所占的字节数比上面的小,应该补齐
这就是关于这些结构体内存变量自己大小的内容啦
最后祝大家!0 error(s),0 warning(s)