类型:转载 责任编辑:asp.net 日期:2007/05/23
热门软件下载:
有这样一个结构体
typedef struct
{
short int bfType; /* 文件类型, 必须为 "BM" (0x4D42) */
long bfSize; /* 文件的大小(字节) */
short int bfReserved1; /* 保留, 必须为 0 */
short int bfReserved2; /* 保留, 必须为 0 */
long bfoffBits; /* 位图阵列相对于文件头的偏移量(字节) */
} BITMAPFILEHEADER; /* 文件头结构 */
为啥sizeof(BITMAPFILEHEADER)的长度是14,应该是2+4+2+2+4=12才对啊
Why?
网友回答:
我试了,是编译器的原因!
字节对齐是可以设置的。如果VC中可以“设置”——》“C/C++”标签下的“Category”选择“Code Generation”页的“Struct member alignment”就可以进行设置了。
另外,这种题面试经常问,唉,其实这有标准答案吗?不同的操作系统答案不同。
如果各位有兴趣而又有条件的话,可以拿到win3.1或TRU-64UNIX试一下,和你们平时见到的结果都不同呢。
如果在VC 6.0下,
改成下面的样子看看:
#pragma pack(1) // 添加
typedef struct
{
short int bfType; /* 文件类型, 必须为 "BM" (0x4D42) */
long bfSize; /* 文件的大小(字节) */
short int bfReserved1; /* 保留, 必须为 0 */
short int bfReserved2; /* 保留, 必须为 0 */
long bfoffBits; /* 位图阵列相对于文件头的偏移量(字节) */
} BITMAPFILEHEADER; /* 文件头结构 */
#pragma pack() // 添加