Wskaźnik do podwójnej tablicy struktur [C]

0

Witam!

Mam poważny problem z odczytywaniem skłądników struktury poprzez wskaźnik.
Co robie źle? Próbowałem już wszytskich metod,skończyłem na tej ponieżej,niestety wciąż niedziałajacej...
Kod w jezyku C.

Struktura:

 struct plane {
int id;
bool reserved;
char name[30];
char surname[50];
} plane_seats[LINES_NUM][SEATS_NUM];

Wskaźnik do niej:

struct plane (* seats)[SEATS_NUM];

Tu w zależności od wybranej funckji w menu (wartośc array_line_num) trafiam do odpowieniej tablicy struktur:

seats=plane_seats[array_line_num]; 

Teraz już tylko w funkcjach odwołuję się do poszczególnych składników w taki (niedziałajacy) sposób:

 seats[i]->reserved
seats[i]->name
seats[i]->surname
seats[i]->id

Proszę o pomoc.

0

Ok wyglada na to ,że jednak uporałęm sie z problemem.
Zmieniłem deklaracje wskaźnika na:

struct plane * seats;

a wszytskie wywołania w funkcji na:

 seats[i]->reserved

]
i działa.
Pozostaje mi tylko kwestia czemu to działa a wcześniejsze nie...
Czyż jeśli wskaźnik deklaruje do tablicy tablic nie powinien on być zadeklarowany w ten mój pierwszy (niedizałający) sposób?

0

[EDIT]
a wszytskie wywołania w funkcji na:

  seats[i].reserved
//itd.
0
struct plane (* seats)[SEATS_NUM];

czyli wskaźnik na tablicę. czyli odwołanie się do elementu tej struktury powinno wyglądać np. tak:

(*seats)[0].reserved
0

A

 seats[i]->reserved

to nie jest to samo co (*seats)[0].reserved

 ?
Przecież -> zastępuje (* xxxxx) i chyba ma większy priorytet niż [x].
Poprawcie mnie jeśli się mylę.
0

gdyby to była tablica wskaźników to byś użył tego pierwszego, ale to jest wskaźnik na tablicę.

seats[i]->reserved

znaczy tyle co:

(*(seats[i])).reserved

zauważ, że seats nie jest tablicą, więc nie mozna go indeksować. dopiero to na co wskazuje jest tablicą.

0

A już myślałem ,że ogarniam te wskaźniki... Wygląda na to ,że jeszcze nie raz mnie zaskoczą.
Dzięki ly000 ,już mi się wszystko rozjaśniło :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1