次のコードを作成して、offsetof() および container_of() マクロを理解しました。ここで、printf() は、同じアドレスではなく、2 つの異なるアドレスを示しています。私は何を間違っていますか?
#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;
}