我在将入口内存地址获取到结构的成员变量时遇到问题。我尝试了两种方法,其中一种不能正常工作。如果大家给我一些建议,那就太好了。
首先,我定义了一个名为 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
为什么第一种方法不起作用?我认为这两种方法完全相同。