006
16.06.2006, 09:53 Uhr
ao
(Operator)
|
Zitat von Pler: |
Naja wie dem auch sei: So sollte es funktionieren: void eingabe(int *a, rechteck **ptr); und beim Aufruf dann: eingabe(&a, &ptr); Zugriff innerhalb von eingabe(): *ptr = new rechteck[*a];
|
... und noch ein Tipp-chen: Man kann zur Ungarischen Notation stehen, wie man will, aber es verbessert m.E. ganz enorm die Übersicht, Zeigervariablen mit p zu prefixen, und zwar ein p für jede Indirektion. Obiger Code sähe dann so aus:
C++: |
void eingabe (int * pA, rechteck ** ppRechteck) { *ppRechteck = new rechteck[*pA]; }
|
Man sieht dann der Variablen sofort an, wie viele Indirektionen nötig sind, um zum Basistyp zu kommen, und man hat es leichter, Indirektionsfehler zu finden und zu vermeiden.
Die Zeile
C++: |
*ptr = new rechteck [*a];
|
ist zwar richtig, sieht aber auf den ersten Blick falsch aus, weil dieser Code ein vertrauteres Bild ist:
C++: |
ptr = new rechteck[a];
|
Nichts ist ärgerlicher als vermeidbare Verwirrung.
Der oben verlinkte Wikipedia-Artikel ist übrigens lesenswert, weil er beschreibt, dass die UN eigentlich nur deswegen so in Verruf geraten ist, weil sie im Win32API missverstanden und falsch angewendet wurde.
ao |