【发布时间】:2013-01-31 10:25:53
【问题描述】:
我在将入口内存地址获取到结构的成员变量时遇到问题。我尝试了两种方法,其中一种不能正常工作。如果大家能给我一些建议就好了。
首先,我定义了一个名为 BITMAP_HEADER 的结构。
struct BITMAP_HEADER
{
WORD bfType ;
DWORD bfSize ;
WORD bfReserved1 ;
WORD bfReserved2 ;
DWORD bfOffBits ;
} ;
第二,我定义并初始化了一些变量。请在阅读下一行之前查看下面的代码。如果你问我为什么有一个字符指针,我需要访问整数 bfSize 的每个字节。
struct BITMAP_HEADER bitmap_header ;
char* pSize = (char*)&bitmap_header.bfSize;
第三,我以两种不同的方式获得了 bfSize 的内存地址并打印了值。
1. printf("%X\n", *pSize) ;
2. printf("%X\n", (unsigned char)*(((char*)&bitmap_header)+2)) ;
(1)直接得到bitmap_header.bfSize的内存地址。
(2) 获得了 BITMAP_HEADER 结构的内存地址,并将指向下一个的指针移动了 2 个字节。
终于,结果如下。
2D
F6
为了您的信息,这里是结构 BITMAP_HEADER 的十六进制数据。
42 4D / F6 C6 2D 00 / 00 00 / 00 00 / 36 00 00 00
为什么第一种方法不起作用?我认为这两种方法完全相同。
【问题讨论】: