我创建了以下代码来理解 offsetof() 和 container_of() 宏。这里 printf() 显示两个不同的地址而不是相同的地址。我究竟做错了什么?
#include <stdio.h>
#include <stddef.h>
typedef unsigned char Byte;
#define container(ptr, type, member) \
({ \
(type *)((Byte *)ptr - offsetof(type, member)); \
})
typedef struct
{
size_t size;
void *block;
}Header;
int main()
{
void *ptr = malloc(3);
Header *pHdr = container(ptr, Header, block);
printf("%p %p\n", ptr, pHdr->block);
return 0;
}