请教一个结构体长度的问题
typedef struct _dcor
{
char a;
char b[8];
char c[8];
double n;
double e;
double z;
int d;
int f;
int g;
}DD;
sizeof(DD) = 64;
typedef struct _dcor
{
char a;
char b[8];
char c[8];
int d;
int f;
int g;
double n;
double e;
double z;
}EE;
sizeof(EE) = 56;
为什么两个结构体大小不一样呢? 用vs2005编译的
[解决办法]
好问题,请搜索“结构体 字节对齐”
[解决办法]
结构体对齐和字节对齐问题
[解决办法]
元素在自己宽度的整数倍位置存储
并且总长度会是结构体里面最长长度的整数倍,不够的话补空位
补充一点
如果有指针,无论什么类型指针都是四个字节长度
[解决办法]
字节对齐问题
[解决办法]
看看这个程序的输出楼主就明白了
/**
* @file demo.c
* @brief
*/
#include <stddef.h>
#include <stdio.h>
typedef struct _DD
{
char a;
char b[8];
char c[8];
double n;
double e;
double z;
int d;
int f;
int g;
}DD;
typedef struct _EE
{
char a;
char b[8];
char c[8];
int d;
int f;
int g;
double n;
double e;
double z;
}EE;
int main(int argc, char *argv[])
{
printf("sizeof(DD)=%d\n", (int)sizeof(DD));
printf("offsetof(DD, a)=%d\n", (int)offsetof(DD, a));
printf("offsetof(DD, b)=%d\n", (int)offsetof(DD, b));
printf("offsetof(DD, c)=%d\n", (int)offsetof(DD, c));
printf("offsetof(DD, n)=%d\n", (int)offsetof(DD, n));
printf("offsetof(DD, e)=%d\n", (int)offsetof(DD, e));
printf("offsetof(DD, z)=%d\n", (int)offsetof(DD, z));
printf("offsetof(DD, d)=%d\n", (int)offsetof(DD, d));
printf("offsetof(DD, f)=%d\n", (int)offsetof(DD, f));
printf("offsetof(DD, g)=%d\n", (int)offsetof(DD, g));
printf("sizeof(EE)=%d\n", (int)sizeof(EE));
printf("offsetof(EE, a)=%d\n", (int)offsetof(EE, a));
printf("offsetof(EE, b)=%d\n", (int)offsetof(EE, b));
printf("offsetof(EE, c)=%d\n", (int)offsetof(EE, c));
printf("offsetof(EE, d)=%d\n", (int)offsetof(EE, d));
printf("offsetof(EE, f)=%d\n", (int)offsetof(EE, f));
printf("offsetof(EE, g)=%d\n", (int)offsetof(EE, g));
printf("offsetof(EE, n)=%d\n", (int)offsetof(EE, n));
printf("offsetof(EE, e)=%d\n", (int)offsetof(EE, e));
printf("offsetof(EE, z)=%d\n", (int)offsetof(EE, z));
return 0;
}