结构体的大小

当我们定义一个结构体时 结构体中可能含有若干属性 假如我们顶一个结构体Student:


     typedef struct  student
    {
    	char a;
    	int b;
    	float c;
    	double d
    }stu;

int main()
{
	int a = sizeof(stu);
	printg("%d\n",a); 
}

这个结果为
在这里插入图片描述
看来结构体的大小并不是简单的将结构体中所有数据类型相加那么简单
这是因为结构体中存在“内存对齐”
在这里插入图片描述
如图 a为char类型,b为int 类型 系统在读取这些内存数据时就会默认3个红格子来补齐内存 以便于下一趟时不会产生差错;

typedef struct student
{
	char a;//1+3
	int b;//4
	float c;//4+4
	double d;//8
}stu;

在算结构体大小的时候要对齐内存如上图代码中 a的内存为1 在加上吧int型时 内存要加3
和b加起来就为8,8时float型的倍数 所以直接加上c的大小为12;12不是double型的倍数所以加上4为16,最后在加上double型的大小就为24了;
注意 结构体最后的大小还应该是 结构体拥有的最大的类型的倍数;
如例子中double的大小为8 24恰好是8的倍数就不做处理;而在为别的数时就要继续对齐。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值