结构体及共用体的大小

结构体:
第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小的整数倍开始,如:int( 在32位机中为4字节,64位机中为8字节)要从4或8的整数倍地址开始存储,需补齐。

struct A                               
{                                     // 所占内存大小
    char ch;                         //    1+3
    int a;                          //      4
}                                  //    1+3+4=8

共用体(联合体):
各个成员以同一个地址开始存放,每一个时刻只可以存储一个成员,所以只需取占内存最大的作为联合体的大小。长度为联合体中元类型(如数组,取其类型的数据长度)最大的变量长度的整数倍,且要大于等于其最大成员所占的存储空间。

union B                                // 所占内存大小
{
    char a;                                //1
    int b[5];// 元长度:4                  //4*5             
    double c;                             // 8
    int d[3];  //元长度:4                  //4*3
}                                          //20+4

例:下面结构体

struct s1                           // 所占内存大小   {                                                          
    char ch,*ptr;                     // 1+3,4
    union
    {
        short a,b;                     //(2,2
        unsigned int c:2,d:1;          //2,1)
    };                                  //2+2
    struct s1 *next;                     //4
    };                
 sizeof(struct s1)的值 :1+3+4+2+2+4 = 16 字节
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值