
计算结构的大小:
可以在结构中定义的数据类型:
1. 基本类型
2. 上面出现的数据类型,例如上面定义的结构
3. 指向自己
由于内存对齐问题,每种数据类型的位置都会导致结构的大小不同,因此最后
如何计算结构的大小?
首先介绍一个概念偏移计算结构体大小,结构中的偏移是结构成员的地址与结构变量之间的差,
例如,第一结构构件的偏移为0,第二结构构件的偏移为第一结构
大小

,如果第一个成员为int b;那么第二个结构成员变量的偏移量是4,
计算结构尺寸的规则:
1. 每个成员的偏移量必须是该成员的倍数.
2. 结构的大小必须是该结构的最大成员(以字节为单位)的倍数.
例如,以下结构: 示例1:
结构A
{
字符a;
短b;
int c;

};
第一个成员的偏移量为0;通常不需要查看它,a的大小为1,因此成员b的偏移量为1,b的大小
是2,1不是2的倍数,因此1 + 1应该是2的倍数,成员c的偏移量是1 + 1 + 2,即成员c
多个,现在满足了计算结构尺寸的第一条规则: 将成员的偏移量更改为成员的大小
的倍数
和第二个规则: 结构的大小是该结构最大成员的倍数,而结构的大小是每个成员的大小
a; 2,b: 2,c: 4的总和为8. 结构的最大成员是c,大小为4计算结构体大小,它满足第二个条件,所以这个结
结构的倍数是8
代码:
#include <stdio.h> int main () { struct A { char a; short b; int c; }; printf ("%d",sizeof(A)); return 0; }


示例2:
结构数据
{
字符a;
int b;
int64_t c;此数据类型是带符号的64位整数数据类型
char d;
}
您不需要读取成员a的偏移量. 表示每个结构的第一个成员的偏移量为0;

但是它的大小是1,这是成员b的偏移量. 成员b的大小为4,并且1不是4的倍数,所以a
1的大小应加到3,即4,成员3的偏移量是8,成员c的大小是8,成员c的偏移量是
成员c的大小的倍数,无需增加大小,成员d的偏移量为16,成员d的大小为1,偏移量
它是成员大小的倍数,现在符合计算结构大小的第一个规则: 将成员的偏移量更改为成员大小
的倍数
,第二个规则: 结构的大小是该结构的最大成员的倍数,最大成员是c,即大小
它是8,结构的大小是每个成员的总和,a: 4,b: 4,c: 8,d: 1全部加起来17,
但是17不是8的倍数,因此我们应该将17 + 7更改为24,因此结构的大小为24
代码:
#include <stdio.h> int main () { struct Data { char a; int b; long long c; char d; }; printf ("%d\n",sizeof(Data)); return 0; }
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-287923-1.html
不过比较灵活