对结构体的sizeof解答

sizeof是一个关键字,用来计算类型的大小,如int占用4个字节等....

主要有两个注意的方面:

一:字节对齐

从结构体的第一个变量开始讲究对齐,以字节为单位;

二:字节对齐要满足3个准则:

a.结构体的第一个变量能够被最宽的基本类型成员的大小所整除;

b.结构体每个成员相对于结构体首地址的偏移量都是当前成员大小的整数倍;不够在后面填充;

c.结构体的总大小一定要是最宽基本类型的整数倍,不够的话在末成员后面添加填充;

struct s1 
{
	int i;
	char *sz;
	double t;
};
struct s2
{
	int w;
	double z;
	char *sx;
};
printf("sizeof(s1):%d", sizeof(s1));	//16
printf("sizeof(s2):%d", sizeof(s2));	//24




解释:第一个结构的大小i 为4个字节,char* 为4个字节,double为8个字节,字节对齐都工整,所以是16个字节
|--------int--------|-------char*--------|   8字节
|------------------double---------------|  8字节


第二个结构的大小w是4个字节,z是8个字节,sx是4个字节,总数确实16个字节  
|--------int--------|---------------------|   8字节
|---------------- double---------------|   8字节
|--------char*----|---------------------| 8字节

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值