#include <stdio.h>
#include <windows.h>
typedef struct _TEST
{
char a;
int b;
short c;
}
TEST;
int main(void)
{
TEST test = {0};
void* p = NULL;
// test结构体的首地址
p = (void*)&test;
printf("0x%08x\n", (int)p);
// test结构体中c成员的地址
p = (void*)&(test.c);
printf("0x%08x\n", (int)p);
// 这个宏的目的是当我们知道某一个 C struct 内的某个field 的 address,
// 我们就可以反推回含有这个 address 的 C struct instance 的 address.
TEST* pTest = CONTAINING_RECORD(p, TEST, c);
// 通过test结构体中c成员的地址加上宏CONTAINING_RECORD的作用计算出的test结构体首地址
printf("0x%08x\n", (int)pTest);
getchar();
return 0;
}
CONTAINING_RECORD宏的作用
最新推荐文章于 2020-10-23 17:37:44 发布