ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
1 июня
163420 Топик полностью
vmp (12.08.2009 11:59, просмотров: 138) ответил Vladimir Ljaschko на Мда... Только извращенный ум может понять. Спасибо, буду пробовать.
Идея этого макроса (OFFSET) достаточно проста. Берем адрес 0. Создаем фиктивную переменную нужного типа по этому адресу: (type *)0 Обращаемся к нужному полю этой переменной: ((type *)0)->field Получаем адрес этого поля: &(((type *)0)->field) Фактически - это то, что нам нужно. Теперь нужно привести адрес к целому числу. Приводим к байтовой адресации: (char *)&(((type *)0)->field) И вычитаем базовый адрес (нулевой): ((char *)&(((type *)0)->field) - (char *)0)