但是我试过:
typedef struct tagFileHeader
{
unsigned int filecode;//4
INT no_used1;//8
INT no_used2;//12
INT no_used3;//16
INT no_used4;//20
INT no_used5;//24
unsigned int FileLength;//28
INT Version;//32
INT Type;//36
DOUBLE Xmin;//48
DOUBLE Ymin;//56
DOUBLE Xmax;//64
DOUBLE Ymax;//72
DOUBLE Zmin;//80
DOUBLE Zmax;//88
DOUBLE Mmin;//96
DOUBLE Mmax;//104
}MFileHeader;长度标在后面,为什么从int到double过渡时就跳了12,而其他的不变呢?
typedef struct tagFileHeader
{
unsigned int filecode;//4
INT no_used1;//8
INT no_used2;//12
INT no_used3;//16
INT no_used4;//20
INT no_used5;//24
unsigned int FileLength;//28
INT Version;//32
INT Type;//36
DOUBLE Xmin;//48
DOUBLE Ymin;//56
DOUBLE Xmax;//64
DOUBLE Ymax;//72
DOUBLE Zmin;//80
DOUBLE Zmax;//88
DOUBLE Mmin;//96
DOUBLE Mmax;//104
}MFileHeader;长度标在后面,为什么从int到double过渡时就跳了12,而其他的不变呢?
#pragma pack(1)
就正常了
int 的长度是4
还有一个原因
VC中有个对齐的机制,如果有double类型,总的长度一定是8的倍数
你可以试一下
#include <stdio.h>
struct a
{
int a1;
double a2;
double a3;
};
void main()
{
printf("%d",sizeof(struct a));
}