我通过确定结构的大小遇到了一个问题。我发现可以使用前面的关键字struct
sizeof-操作内部确定结构的大小,尽管没有为相应的结构创建对象:
例:
#include <stdio.h>
int main()
{
struct struct1
{
char a[20];
int v,i;
double grw;
};
printf("Size of struct1 in Byte: %lu",sizeof(struct struct1));
return 0;
}
输出:
Size of struct1 in Byte: 40
这怎么可能?
如果没有创建此结构的对象,sizeof 如何借助 sizeof-操作中的struct
关键字确定结构的大小?
还是已经创造了一个struct1
对象,我不知道?
我认为结构只是一个数据类型,而不是它自己的类型的对象。
除了可变长度数组之外,sizeof
不需要类型的实例来计算其大小,它可以仅根据类型定义本身来计算它。
在您给出的情况下(如下所示(,它实际上仅从该类型定义中就知道对象的大小(每个单独字段的大小加上每个字段之间和最后一个字段之后对齐所需的任何填充( - 注释给出了一种可能性:
struct struct1 {
char a[20]; // 20 bytes @ 0.
int v,i; // Two 4-byte values @ 20 (a multiple of 4, so already aligned).
// 4 bytes padding to align next 8-byte double.
double grw; // 8 bytes @ 32 (a multiple of 8, aligned due to padding above).
};
sizeof
需要能够确定不同类型的大小,否则它不知道在需要分配多少空间时分配。
struct
定义指示将使用的空间量。
一个分配可能是这样的:
char a[20]
: 20 字节。int c, i
:每个 16 位,因此 4 个字节。double grw
:128位,所以16字节。
总计:40 字节