struct BITMAPFILEHEADER
{
   WORD bfType;           00()()
   DWORD bfsize;          000 0
   WORD  bfreserved1;     00 00 
   WORD  bfreserved2;
   DWORD bfoffBits;       0000
}這樣sizeof(BITMAPFILEHEADER) 應該是16阿/為甚麼計算出為14呢/?
()()表示要補上的空間]

解决方案 »

  1.   

    http://expert.csdn.net/Expert/topic/2168/2168165.xml?temp=.3854029
    论坛说过这个问题,看看吧
      

  2.   

    WORD占两个字节
    DWORD占四个字节
    struct BITMAPFILEHEADER
    {
       WORD bfType;           //2
       DWORD bfsize;          //4
       WORD  bfreserved1;     //2 
       WORD  bfreserved2;     //2
       DWORD bfoffBits;       //4
    }()()表示要補上的空間] ? 什么意思?
    结构体在定义的时候是不分配空间的,只有定义该结构体对象的时候才分配空间
    不知道楼主补上空间是什么意思!
      

  3.   

    应该出来16
    计算是14
    前面加上#pragma pack(1)
    这是VC的一种优化
      

  4.   

    就是14啊。你怎么算出16的?WORD=2,DWORD=4
    DWORD×2+WORD×3 =14
      

  5.   

    就是16啊,你怎么算出了14的?首先
    #pragma pack(push) //保存对齐状态
    #pragma pack(1)
    #pragma pack(pop)
    这个东西有没有?其次Alt+F7中的C/C++中的Code Generation中的struct member alignment是不是一个字节?
      

  6.   

    是16呀,没错。
    难道你的程序是win16的吗
      

  7.   

    边界调整.
    如下: class Concrete1 {
    public:
      //……
    private:
      int val;
      char bit1;
    };除开其他影响,Concrete1 占8字节。
    Concrete1 Object中,为使Object能够符合一个机器的word(32位操作系统中为4字节)边界,必须补充3bytes字节。此称为边界调整。边界调整一般由编译器完成。
      

  8.   

    你用的是WIN16还是WIN32啊?
      

  9.   

    边界对齐WORD占两个字节
    DWORD占四个字节
    struct BITMAPFILEHEADER
    {
       WORD bfType;           //2
       /* ......                2        */
       DWORD bfsize;          //4
       WORD  bfreserved1;     //2 
       WORD  bfreserved2;     //2
       DWORD bfoffBits;       //4
    }
      

  10.   

    考你们一个问题吧,普通情况下
    struct xyz
    {
    xyz(){x=0;y=0;z=0;};
    int x;
    int y;
    int z;
    };
    占几个字节?
      

  11.   

    按照常規边界对齐WORD占两个字节
    DWORD占四个字节
    struct BITMAPFILEHEADER
    {
       WORD bfType;           //2
       /* ......                2        */
       DWORD bfsize;          //4
       WORD  bfreserved1;     //2 
       WORD  bfreserved2;     //2
       DWORD bfoffBits;       //4
    }
    應該是16阿!!
    sizeof出來卻是14,是我只知其一不知其二麼/
      

  12.   

    在定义BITMAPFILEHEADER结构体之前包含了下面这一文件
    #include <pshpack2.h>其中有#pragma pack(2), 把结构体的对齐方式设为了二字节对齐。
      

  13.   

    呵呵,当然是14,DWORD是两个WORD,总共五个中有两个DWORD,不就等于七个WORD,14个字节嘛!