Every Day's Gain

Larry.Zhao's Coding Diary
随笔 - 23, 文章 - 1, 评论 - 2, 引用 - 0
数据加载中……

注意指针运算

今天这个问题困扰了我很久。取一个位图函数头,书上的方法是:
PBYTE                                  pFile;
BITMAPFILEHEADER *    pmbfh;
BITMAPV5HEADER    *    pmbih;
pFile=malloc(dwFileSize);
ReadFile(hFile, pFile,.....);
pmbfh=(BITMAPFILEHEADER *)pFile;
pmbih=(BITMAPV5HEADER  *)(pFile  + sizeof(BITMAPFILEHEADER));

我写类的时候为了方便就直接往文件头里面读:
pmbfh=(BITMAPFILEHEADER * )malloc(dwFileSize);
ReadFile(hFile, pmbfh,.....);
pmbih=(BITMAPV5HEADER  *)(pmbfh  + sizeof(BITMAPFILEHEADER));


读数据一切正常,可是在从pmbih结构体里读取位图信息的时候报错,我最后没有办法,把读出的数据用二进制显示来看哪里的问题。最终问题是出在这里:pmbih=(BITMAPV5HEADER  *)(pmbfh  + sizeof(BITMAPFILEHEADER));
pmbfh是位图文件头类型的指针,加上一个整数,按照指针运算,会依照自己指向类型的大小移动,而sizeof返回的是后面位图文件头结构体的字节单位大小,所以移动的偏移量不对了。而pFile本身就是字节型的指针,所以是正确的。以后要注意指针运算。

posted on 2005-07-13 00:07 Larry.Zhao's Coding Diary 阅读(324) 评论(0)  编辑 收藏 引用 所属分类: Windows App Programing

只有注册用户登录后才能发表评论。