Что касается языка программирования C...
Часть вопроса в C/С++ Structure offset утверждает, что "& не всегда указывает на первый байт первого поля структуры"
Но, смотря на "Обоснование ANSI" на http://www.lysator.liu.se/c/rat/c5.html, говорится, что "в начале нет никакого отверстия" в разделе 3.5. 2.1. Спецификации структуры и союза. Поэтому я не уверен, является ли "Обоснование" окончательным, но, похоже, это противоречит той части этого очень заметного вопроса.
Итак, что это? Является ли первое поле структуры C всегда гарантированным при смещении 0?
struct A
{
int x;
};
struct B
{
struct A myA;
int y;
};
B myB;
Возможно ли &myB
быть таким же, как &(myB.myA)
, переносимым образом?
(Более конкретно, трюк пользовательских данных libev в Libev, как передать аргументы соответствующим обратным вызовам и во многих других местах, предполагает, что первое поле в структуре при смещении 0... это действительно портативно?)