可能重复:
为什么结构的 sizeof 不等于每个成员的 sizeof 之和?
sizeof(struct) 返回意外值
我编写了一个程序来查找以下结构 abc 的大小。
一个。内置的 sizeof() 运算符提到这个结构的大小是 40,而实际上它是 32?我也尝试减去地址来确定这一点,结果也是 40。
湾。当我注释掉“char g[3];” 在 struct abc 内部,abc = 32 的大小。这对我来说也没有任何意义。这不应该是28吗?
C。为什么我需要强制转换为 "unsigned int" ?如果我不进行强制转换,我会收到以下编译错误消息。&a[0] 实际上不是一个地址(应该是一个 int)吗?
size_of_struct\size_of_struct.cpp(24):错误 C2440:“=”:无法从“abc *”转换为“无符号整数”
信息:我正在运行 win 7、64 位系统。MS Visual Studio 编译器。
#include <iostream>
struct char_three{
char a[3];
};
struct int_three{
int a[3];
};
struct abc
{
int a; // 4 bytes
double b; // 8
void *ptr; // 4
char g[3]; // 4 due to padding ?
int c[3]; // 12
}; // Total size of struct - 31 / 32.
int main ()
{
abc a[2];
unsigned int add0, add1;
add0 = (unsigned int) &a[0];
add1 = (unsigned int) &a[1];
printf("add1 of a is :%x add0 is :%x\n", add1, add0);
printf("size of struct abc : %d\n", add1-add0);
printf("size of int: %d\n", sizeof(int));
printf("size of double: %d\n", sizeof(double));
printf("size of void ptr: %d\n", sizeof(void *));
printf("size of 3 char: %d\n", sizeof(char_three));
printf("size of 3 int: %d\n", sizeof(int_three));
printf("size of a: %d\n", sizeof(a));
system("pause");
return 0;
}
O/P:
add1 of a is :51f828 add0 is :51f800
size of struct abc : 40
size of int: 4
size of double: 8
size of void ptr: 4
size of 3 char: 3
size of 3 int: 12
size of a: 80
Press any key to continue . . .