C: ZeigerArray vs. ArrayZeiger

Moin,

ich habe etwas Schwierigkeiten nachzuvollziehen, warum

int (*b)[12] ein Zeiger auf ein Array von 12 ints

und

int *b [12] ein Array von 12 Zeigern auf int

ist.

Kann mir jemand sagen, wie man die Klammersetzung vernünftig interpretiert, um zu diesem Ergebnis zu kommen?

thx
moe.

Hallo

ich habe etwas Schwierigkeiten nachzuvollziehen, warum
int (*b)[12] ein Zeiger auf ein Array von 12 ints
und
int *b [12] ein Array von 12 Zeigern auf int
ist.
Kann mir jemand sagen, wie man die Klammersetzung vernünftig
interpretiert, um zu diesem Ergebnis zu kommen?

Die Klammer um (*b) musst Du machen, weil
die eckige Klammer [] „klebriger“ ist als
der * als „Zeigermarkierung“.

Überleg mal:

 typedef int IVEC[12];

 int (\* ca)[12]; // identisch ca/cb
 IVEC \* cb; // identisch ca/cb

 typedef int\* IPTR;

 int \* cc[12]; // identisch cc/cd
 IPTR cd[12]; // identisch cc/cd

Was genau bereitet Dir noch Schwierigkeiten?

Grüße

CMБ

Hallo,

ich habe etwas Schwierigkeiten nachzuvollziehen, warum

int (*b)[12] ein Zeiger auf ein Array von 12 ints

und

int *b [12] ein Array von 12 Zeigern auf int

ist.

Kann mir jemand sagen, wie man die Klammersetzung vernünftig
interpretiert, um zu diesem Ergebnis zu kommen?

Denk dir einfach, dass der ‚*‘ zum Typen dazu gehört, was oBdA eigentlich auch der Fall ist. (ich schreibe den Stern immer direkt nach dem Typ, außer ich werde wie im ersten Beispiel oben dazu gezwungen,es anders zu machen)

int - typ integer
int* - typ zeiger auf integer
int& - referenz auf int
int*& - referenz auf zeiger auf int (weil ja int* der typ ist)

Aufgrund zur Abwärtskompatibilität zu C ist das leider nicht immer so konsequent umgesetzt.

analog:

int ia[12] - array aus ints
int* ia[12] - array aus zeiger auf int
int (*ia)[12] - zeiger auf array aus 12 int, wobei ich in diesem Fall

int** ia;

vorziehen würde.

Grüße,
Maxim

Danke.