关于sizeof求struct和union长度的问题

最近复习sizeof的相关用法,发现自己之前理解错误,这里巩固一下

第一部分:struct类型的sizeof计算

类型一:空结构体

/*空结构体*/
struct test
{
};

//结果:sizeof(test) = 1

类型二:一般结构体1

/*一般结构体1*/
struct test
{
    int a;    //长度:4
    double b;    //长度:8
    //部分一:8+4=12——>内存对齐后为:16

    char c;    //长度:1
    //部分二:1——>内存对齐后为:8
};
//因为此结构体占用内存最长的是b,所以从dobule处开始分为两部分进行讨论
//结果:sizeof(test) = 16 + 8 = 24

类型二:一般结构体2

/*一般结构体2*/
struct test
{
    char a;//1
    double c;//8
    //部分一:1+8=9 -> 16

    int b;//4
    bool d;//1
    //部分一:4+1=5 -> 8
};

类型三:包含数组的结构体

struct test
{
    int a;    //4
    double b;    //8
    //部分一:4+8=12 -> 16
    
    char c[10];    //10
    //部分二:1 * 10 = 10 -> 16

};
输出长度为32

类型四:内嵌结构体情况一

/*内嵌结构体情况一*/
struct test1 
{
    char a;    //1
    int b;     //4
    double c;  //8

    bool d;    //1
};
//sizeof(test1) = 24

struct  test2
{
    char a;        //1
    test1 bb;      //24
    //25->32

    int cc;        //4
    //4->8
};
//结果:sizeof(test2) = 32 + 8 = 40

类型四:内嵌结构体情况二

//内嵌结构体情况二
struct test4 
{
    char a;    //1
    int b;    //4
};
//sizeof(test4) = 8

struct test5 
{
    char c;        //1
    test4 d;        //8(该结构体成员变量最大为4字节,所以从double开始分)
    double e;        //8
    //第一部分:1+8+8=17 -> 24

    bool f;        //1
    //第二部分:1 -> 8
};
//结果:sizeof(test5) = 24 + 8 = 32

第二部分:union类型的sizeof计算

类型一:一般联合体类型

/*一般联合体类型*/
union un
{
    int a;      //长度4
    double b;   //长度8
    char c;     //长度1
    int d;      //长度4
};

结果:其中占用内存最长的:sizeof(un) = 8

类型二:包含数组的联合体1

/*数组型1*/
union test
{
    int a;        //4
    double b;        //8
    char c[10];    //1 * 10 = 10

};
//联合体最大数据类型为c[10],长度为10,进行内存对齐后,联合体长度应为2*8=16

类型二:包含数组的联合体2

/*数组型2*/
union un
{
    int a[7]; //长度 -> 4 * 7=28
    double b; //长度 -> 8
    char c[10]; //长度 -> 1 * 10
    int d[3]; //长度 -> 3 * 4=12
};
//可知最长的为a[7],长度为28,但需要内存对齐,所以结果:sizeof(un) = 32

类型三:嵌套型

/*嵌套型*/
union number
{
    int i;      //长度:4
    struct   
    { 
        char first;        //长度:1
        char second;    //长度:1
    }half;
}num;
//其中half结构体长度为1+1=2 -> 8,但最长的类型是char,小于结构体number中的int,所以结果:sizeof(num) = 4

OK,目前就这些,有补充的话欢迎各位踊跃发言

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值