Вторым в первой структуре является не указатель, а FAM - гибкий элемент массива.Он используется, когда у вас длинный буфер и вы ставите e
в начале этого буфера.Затем вы можете индексировать оставшуюся память, которая следует за объектом e
, используя эту FAM и обрабатывать эту память как массив void*
.
Стандарт гласит (выделено мной)
В особом случае последний элемент структуры с более чем одним именованным элементом может иметь тип неполного массива;это называется членом гибкого массива.В большинстве случаев член гибкого массива игнорируется. В частности, размер структуры такой, как если бы элемент гибкого массива был опущен, за исключением того, что он может иметь больше запаздывающего отступа, чем это может означать упущение.следующий код выводит 1
для структуры без, но 4
для структуры с FAM на GCC, потому что для доступа к целым числам FAM необходимо правильно выровнять (на 4-байтовой границе в этом примере)*