Давайте рассмотрим это.
Во всех случаях sizeof(char) == 1
и массив list
будут иметь три члена в ячейках памяти list
, list + 1
и list + 2
.
Ситуация с struct
не так ясна. Стандарт гарантирует, что члены будут размещены в увеличивающихся ячейках памяти, но не будут смежными. Компилятор может вводить отступ между элементами и заполнение в конце.
Следовательно, s->a == 1
всегда будет верным. Если реализация помещает unsigned char
s в struct
рядом (и большинство будет), тогда другие равенства обязательно будут истинными.
Кстати, вызов struct
_struct
может вызвать проблемы. Имя, начинающееся с подчеркивания в глобальном пространстве имен, зарезервировано для реализации.