前几天在写到一个读取 BITMAP图像大小的时候,按照 图像的定义定义 了一个结构体,但是读取的时候总是出错,后来看网上的是把前两个成员单独读取,
经过查网上原因,分析得,结构体大小是你所定义的结构体成员中最宽字节的整数倍
如
struct student
{
int name;
char b;
};
sizeof(student)的大小为8而非4+1=5;
且对于 其中long型 的定义 也 要小心,我在WINDOWS上32位编译器在GCC下编译通过读取图片程序,在LINUX下通不过,原因 是long型在32位是4字节,在64位时是8字节
记录一下各类型的大小
16位编译器
char :1个字节
char*(即指针变量): 2个字节
short int : 2个字节
int: 2个字节
unsigned int : 2个字节
float: 4个字节
double: 8个字节
long: 4个字节
long long: 8个字节
unsigned long: 4个字节
32位编译器
char :1个字节
char*(即指针变量): 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节。同理64位编译器)
short int : 2个字节
int: 4个字节
unsigned int : 4个字节
float: 4个字节
double: 8个字节
long: 4个字节
long long: 8个字节
unsigned long: 4个字节
64位编译器
char*(即指针变量): 8个字节
short int : 2个字节
int: 4个字节
unsigned int : 4个字节
float: 4个字节
double: 8个字节
long: 8个字节
long long: 8个字节
unsigned long: 8个字节