C: unterschied *(*zgr[10]) und *(*zgr)[10]

Gast #2052565
Lesenswert?
• ▲
▼
Hallo ich hab eine kurze frage:
1
int *zgr[10]; // Zeiger-Array, Zeiger zeigen auf int Werte.
2

3
int *(*zgr)[10]; // Zeiger auf einen Zeiger, der auf ein int-Array mit der größe 10 zeigt
4

5
int *(*zgr[10]); // Zeiger auf ein Zeiger-Array, welches auf int zeigt

Ist das so richtig? Wenn nicht wie dann?

Danke
#2052629
Lesenswert?
• ▲
▼
mir der right - left Rule   (Googeln!)

int *zgr[10];
*************

       zgr                  zgr ist ein
       zgr[10]              zgr ist ein Array (10) von

     * zgr[10]              zgr ist ein Array (10) von Zeigern
 int * zgr[10]              zgr ist ein Array (10 von Zeigern auf int


int *(*zgr)[10];
****************


        zgr                 zgr ist ein
        zgr)                zgr ist ein
       *zgr)                zgr ist ein Zeiger
      (*zgr)                zgr ist ein Zeiger
      (*zgr)[10]            zgr ist ein Zeiger auf ein Array
     *(*zgr)[10]            zgr ist ein Zeiger auf ein Array von
                            Zeigern
 int *(*zgr)[10]            zgr ist ein Zeiger auf ein Array von
                            Zeigern auf int


int *(*zgr[10]);
****************

         zgr                 zgr ist ein
         zgr[10]             zgr ist ein Array von
         zgr[10])            zgr ist ein Array von
        *zgr[10])            zgr ist ein Array von Zeigern
       (*zgr[10])            zgr ist ein Array von Zeigern
      *(*zgr[10])            zgr ist ein Array von Zeigern auf Zeiger
 int  *(*zgr[10])            zgr ist ein Array von Zeigern auf Zeiger
                             auf int


Beim Variablennamen anfangen und nach rechts gehen (wenns geht). Ein [] 
wird als 'Array von' übersetzt, ein () wird als 'Funktion übersetzt. 
Triffst du auf eine einzelne ), dann dreht sich die Lesereichtung um und 
es geht links weiter (und umgekehrt).
#2052637
Lesenswert?
• ▲
▼
A. K. schrieb:
> (1) korrekt.
> (2) Zeiger auf Array von Zeigern auf int.
> (3) Array aus Zeigern auf Zeiger auf int.
>
> @beide: ausgehend von dem Variablennamen dem Vorrang folgend von innen
> nach aussen auflösen. Etwaige Danksagungen für diesen Schwachfug bitte
> an Dennis Ritchie richten.

Danke Dennis!

(Wer sowas ohne typedef schreibt ist selber schuld :-)
Moderator #2052672
Lesenswert?
• ▲
▼
Vor vielen Jahren habe ich mal ein Tool gesehen, das die C-Notation von
Datentypen in englische Prosa übersetzt. Ich hielt so etwas damals für
uncool :), aber hier im Forum wäre es schon mehrfach von Nutzen gewesen.

Kennt das zufälligerweise jemand und hat einen aktuellen Link?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren