Недавно я увидел что-то классное.
#define container_of(ptr, type, member) ({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) );})
По сути, я знаю, что делает этот макрос. Но есть одна вещь, которую я не могу понять.
Почему мы можем привести 0
в тип указателя (struct) и получить доступ к его члену? Я уже сослался на некоторые подобные вещи, а 0
выглядит как нулевой указатель. Так почему же мы можем привести нулевой указатель и затем получить доступ к его члену?