"Если бы был элемент struct c
, начинающийся точно с (идеально выровненного ;-) адреса 0x1000
, то по какому адресу был бы член структуры f
?"- ответ: смещение, которое вы ищете, за исключением, конечно, гипотетического начального адреса 0x1000
для структуры ... с разницей, расстоянием или смещением АКА, вычисляемым как целые числа, в противном случае автоматическое масштабирование в адресной арифметике выбрасывает васoff (откуда приведен).
Какие части выражения, в частности, доставляют вам проблемы?
Внутренняя часть &(((c *)0x1000)->f)
является «адресом члена f
гипотетическогоstruct c
, расположенная в 0x1000
. Прямо перед ней находится приведение (я предполагаю, что TInt
, конечно, является целочисленным типом), затем - 0x1000
, чтобы получить смещение (расстояние АКА или разницу междуадрес конкретного заинтересованного члена и начало всей структуры).