一个“奇怪的”宏定义,不知道是什么意思?
//
// Calculate the address of the base of the structure given its type, and an
// address of a field within the structure.
//
#define CONTAINING_RECORD(address, type, field) ((type *)( \
(PCHAR)(address) - \
(ULONG_PTR)(&((type *)0)->field)))
在这个宏定义中,((type *)0)->field所起的作用是什么?为什么要将0转换成指定类型的指针?那这样岂不是成了空指针了吗?