C语言关于结构体大小的问题

C语言结构体若没有特殊定义,大小都是按照结构体中最大的元素为单位来计算的例如

typedef struct _A
{
 int a;
 char b;
}A;

A结构体大小为8字节

若想不按照此规则来定义结构体大小,也就是结构体每个元素占用了多大实际结构体占用大小就是元素的总和的话,则需要在结构体前后加上

#pragma pack(push)

#pragma pack(1)

typedef struct _A
{
 int a;
 char b;
}A;

#pragma pack(pop)

这样,A结构体的大小就为5字节。

那么请看如下两个结构体,你们认为大小分别是多少呢?

typedef struct _B
{
 int a;     
 short b; 
 int c;    
 char d;    
}B;
typedef struct _C
{
 int a;     
 short b;   
 char c;   
 int d;     
}C;

 答案是,sizeof(B) = 16 , sizeof(C) = 12,这就涉及下一个规则,虽然B和C类型的结构体成员一样,但是由于排列顺序不同,short型和char型因为都没有到一个int的大小,加起来也没有超过一个int的大小,所以若这两个类型连起来定义,会自动为这两个类型分配一个int的大小也就是4字节。若没有连起来定义,当然还是各自分配一个4字节大小。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值