Зачем кому-то это делать? Еще лучше, как это работает? Я бы предположил, что это каким-то образом создаст массив из трех структур с только определенным первым членом. Я понимаю, что указатель указывает на первый элемент массива, и я вижу, как это может работать, но как это определено, отбрасывает меня! (GCC 4.8.4)Инициализация массива структуры инициализирует весь член одного элемента, почему?
void do_something(const void *);
typedef struct{
int a;
char b;
int c;
} the_data_t;
int main(int argc, char *argv[])
{
the_data_t my_data[] = {10, 'a', 30};
do_something((const void *)my_data);
}
void do_something(const void *data)
{
printf("data a: %d\ndata b: %c\ndata c: %d\n", ((the_data_t*)data)->a,
((the_data_t*)data)->b, ((the_data_t*)data)->c);
}
Выход
данные А: 10
данные B:
данные с: 30
Независимо от того, я изменил его к этому. .
int main(int argc, char *argv[])
{
the_data_t my_data = {10, 'a', 30};
do_something(&my_data);
}
Вы должны показать реальный код. Может быть, вспомогательная функция предназначена для работы с массивами.Поэтому, если массив содержит хотя бы один элемент, вы должны объявить его как массив, а не одну структуру. –
Невозможно инициализировать только часть структуры, это все или ничего. – molbdnilo