Рассмотрим следующую однородную структуру:
struct myStruct {
void* a;
char* b;
int* c;
};
Я считаю, что это однородно, потому что все типы данных являются указателями.
С учетом этой структуры следующий код будет действительным и переносимым на C99?
int main()
{
void* x = NULL;
char* y = "hello";
int* z = malloc(sizeof(int) * 10);
z[2] = 10;
void** myArray = malloc(sizeof(void*) * 3);
myArray[0] = x;
myArray[1] = y;
myArray[2] = z;
struct myStruct* s = (struct myStruct*)myArray;
printf("%p %s %d\n", s->a, s->b, s->c[2]);
return 0;
}
Я понимаю, что structs часто добавляет дополнение между компонентами, чтобы сохранить согласованность структуры, однако, поскольку типы указателей одинаковы, безопасно ли предположить, что никакие дополнения не будут добавлены? Я не обязательно спрашиваю, есть ли 100% -ная гарантия (я понимаю, что это полностью конкретная реализация, и что компилятор может добавлять дополнения для неясных причин), больше я прошу указать, какие дополнения могут быть добавлены в однородную структуру, если есть какие-либо причины.