C语言结构体大小计算(超详细,例子丰富,有图)

       看了网上很多关于结构体大小计算的方法,感觉很多讲的不是很清楚,换一种例子就行不通了,我自己也是查阅了很多资料,并且进行了大量的例子验证,总结了一个很好计算结构体大小的方法,直接无脑以下三步即可

1、找到结构体中最大的成员变量所占的字节数

2、结构体中成员变量的起始地址为该成员变量大小的整数倍(一般情况下我们认为第一个成员变量的起始地址为0)

3、结构体变量的总大小必须要是结构体中最大变量字节的整数倍(不足补齐)

案例分析

例1

struct demo1{
    char a;
    int b;
}demo1;

       首先找出最大的变量int b占4字节,char a从地址0开始存放,0是1的整数倍(char占一个字节)所以没毛病,int b则要从位置4开始存放,现在总共占8个字节,再看8是不是4的倍数,很明显是,所以该结构体占8个字节

C语言结构体大小计算(超详细,例子丰富,有图)_第1张图片

C语言结构体大小计算(超详细,例子丰富,有图)_第2张图片 

例2

struct demo2{
    char a;
    char b;
    int c;
}demo2;

       a从0开始存放,b因为也只占1个字节,所以可以从1开始存放(1也是1的倍数嘛),c从4开始存放

C语言结构体大小计算(超详细,例子丰富,有图)_第3张图片

C语言结构体大小计算(超详细,例子丰富,有图)_第4张图片 

例3 

struct demo3{
    int a;
    short b;
}demo3;

a变量从0到4,b变量从4到6,因此占6个字节,但是!因为我们说过结构体变量的总大小要为结构体中最大的变量的整数倍,所以这里要补为8

C语言结构体大小计算(超详细,例子丰富,有图)_第5张图片

 C语言结构体大小计算(超详细,例子丰富,有图)_第6张图片

例4

struct demo4{
    double a;
    short b;
    int c;
}demo4;

 a变量从0到8,b变量占2个字节,所以可以从8开始存储,存储位置为8到10,c变量只能从12开始存储,存储位置为12到16

C语言结构体大小计算(超详细,例子丰富,有图)_第7张图片

C语言结构体大小计算(超详细,例子丰富,有图)_第8张图片 

例5 

struct demo5{
    short a;
    double b;
    int c;
}demo5;

a从0开始占2个字节,因为b为8个字节所以起始地址必须从8开始到16,c变量起始地址从16开始到20,总共20个字节,但是因为结构体变量的总大小必须为8字节的倍数,所以补齐为24

C语言结构体大小计算(超详细,例子丰富,有图)_第9张图片

C语言结构体大小计算(超详细,例子丰富,有图)_第10张图片 

 例6

struct demo6
{
    char c[10];
    char ca[5];
    int a;
}demo6;

数组c和数组ca都是一个字符数组,数组里面的每个元素都只占一个字节,从0地址开始都满足我们所说的“结构体变量的起始地址是该结构体变量大小的整数倍”的要求,所以前两个数组总共占15个字节,a变量从16开始到20,所以最终该结构体变量占20个字节

C语言结构体大小计算(超详细,例子丰富,有图)_第11张图片

C语言结构体大小计算(超详细,例子丰富,有图)_第12张图片 

 

你可能感兴趣的:(C语言,c语言)