Преобразование указателя на A в указатель на структуру B, в которую встроен A - PullRequest
0 голосов
/ 22 мая 2018

В проекте Pintos есть макрос, который преобразует указатель, как я написал в заголовке.

#define list_entry(LIST_ELEM, STRUCT, MEMBER)
                     ((STRUCT *) ((uint8_t *) &(LIST_ELEM)->next
                     - offsetof (STRUCT, MEMBER.next)))

(в src / lib / kernel / list.h)

Почему этоне так ли?

#define list_entry(LIST_ELEM, STRUCT, MEMBER)
                     ((STRUCT *) ((uint8_t *)LIST_ELEM
                     - offsetof (STRUCT, MEMBER)))
...