000
13.01.2012, 16:04 Uhr
~chris0054
Gast
|
Hallo!
Ich versuche als Übung, durch ein zweidimensionales Feld einmal mit Zeigerarithmetik und einmal ohne (d.h. "normal") durchzuiterieren. Dafür definiere ich weiters das Feld einmal mithilfe von Pointern und new und einmal "normal".
Allerdings verstehe ich hier etwas nicht:
C++: |
int Feld[5][2]; int** foo = Feld; // Geht nicht, Fehlermeldung int (*bar)[2] = Feld; // Geht
int Feld2[5]; int* ble = Feld2; // Geht schon ?!?
|
Warum geht der Zeigerzugriff beim zweidimensionalen Array so nicht, aber beim eindimensionalen schon? Warum muss ich beim zweidimensionalen Array, wenn ich etwas wie oben machen will, einen Pointer wie in der dritten Zeile erstellen?
Jetzt allerdings gibt es noch die andere Version:
C++: |
int** Feld = new int*[5]; for (int i = 0; i < 5; i++) { Feld[i] = new int[2]; }
for (int** ptr = Feld; ptr != Feld + 5; ptr++) { ... } // Geht ?!
|
Warum geht das jetzt schon? Ich dachte, zwischen dem mit Zeigern erstellten Feld und dem ohne Zeiger erstellten Feld, sondern mit Subskript-Operator erstelltem Feld ist kein Unterschied?
Danke im Voraus! |