Dlaczego ktoś to zrobił? Jeszcze lepiej, jak to działa? Założę się, że to w jakiś sposób stworzy tablicę trzech struktur z tylko pierwszym zdefiniowanym elementem. Zdaję sobie sprawę, że wskaźnik wskazuje na pierwszy element tablicy i widzę, jak to może działać, ale jak to zdefiniowano, to mnie wyrzuca! (GCC 4.8.4)Inicjalizacja tablicy struktury inicjuje wszystkich członków jednego elementu, dlaczego?
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);
}
wyjściowy
Dane A: 10
danych B: a
Dane C: 30
Niezależnie od tego, że zmienił się do tego.
int main(int argc, char *argv[])
{
the_data_t my_data = {10, 'a', 30};
do_something(&my_data);
}
Powinieneś pokazać prawdziwy kod. Możliwe, że funkcja pomocnicza została zaprojektowana do pracy z tablicami.Więc jeśli tablica zawiera nawet jeden element, powinieneś zadeklarować ją jako tablicę zamiast pojedynczej struktury. –
Nie można zainicjować tylko części struktury, to wszystko albo nic. – molbdnilo