?
volkard schrieb:
typedef int* ((*WeirdVar[7])[8]) []; //Feld von 8 Feldern von 7 Zeigern auf Integer
Nee.
Typelesen geht so:
Man liest den Bezeichner
int* ((*WeirdVar[7])[8]) [];
WeirdVar ist...
Und dann immer rechts vor links, außer eine überraschende runde Klammern zwingt einen, erst drinnen zu bleiben.
Also gehts nach rechts.
int* ((*WeirdVar[7])[8]) [];
WeirdVar ist ein Array von 7...
Ah, die Klammer.
int* ((*WeirdVar[7])[8]) [];
WeirdVar ist ein Array von 7 Zeigern auf...
So, in der Klammer ist alles gelesen, kann weg.
int* ((*WeirdVar[7])[8]) [];
Rechts gehts weiter, rechts vor links.
int* ((*WeirdVar[7])[8]) [];
WeirdVar ist ein Array von 7 Zeigern auf Array von 8...
Überraschende klammer, ich suche also links, oh, da ist nix mehr, diese Klammer war wohl gar nicht nötig.
int* *((WeirdVar[7])[8]) [];
Weiter rechts.
int* ((*WeirdVar[7])[8]) [];
WeirdVar ist ein Array von 7 Zeigern auf Array von 8 Arrays von...
int*** ((*WeirdVar[7])[8]) []**;
WeirdVar ist ein Array von 7 Zeigern auf Array von 8 Arrays von Zeigern auf...
int ((*WeirdVar[7])[8]) []*;
WeirdVar ist ein Array von 7 Zeigern auf Array von 8 Arrays von Zeigern auf int.
Also das Lesen geht ganz mechanisch. Das Schreiben nicht, aber egal, kannst ja ein wenig fummeln und es ja immer durch Lesen prüfen.
Also ist folgendes korrekt?:
typedef int* ((WeirdVar[])[8]) [7]; //Feld von 8 Feldern von 7 Zeigern auf Integer
Ich weiß nicht, was mit "Feld von 8 Feldern von 7 Zeigern auf Integer" gemeint ist.
Entweder obriges oder möglicherweise dies?:
typedef int* WeirdVar[8][7];
Wobei das Zweite ein zweidimensionaler Array ist.
Die Aufgabe ist möglicherweise etwas schlecht formuliert, das fällt mir bei dem Buch auch insgesamt ein bisschen auf. Es heißt "Die C++ Programmiersprache von Bjarne Stroustrup".
Das Originale Buch im Englischen ist wahrscheinlich verständlicher, da ich mir vorstellen kann, dass so ein Buch über eine Programmiersprache ziemlich schwer ist, zu übersetzen.