Я наткнулся на макрос ниже
#define OFFSETOF(TYPE, ELEMENT) ((size_t)&(((TYPE *)0)->ELEMENT))
Я как бы не в состоянии переварить это, потому что в C ++, когда я пытаюсь уважать нулевой указатель , Я ожидаю неожиданного поведения ... но почему у него может быть адрес? что означает адрес null?