Pointer auf mehrdimensionale Arrays
-
Hallo,
schau mal hier:
http://www.c-plusplus.net/forum/viewtopic.php?t=58906
http://www.c-plusplus.net/forum/viewtopic.php?t=36422&highlight=mehrdimensionales+array
-
Viking69 schrieb:
dieser Code geht leider net:
int *p=pMap[3][7]; *p=3;
Genauer gesagt er meckert das an: pMap[3][7]
Das war auch nur ein Beispiel. Du musst schon selbst schauen, wie du das in deinem Programm integrierst. Abgesehen davon, du hast ja kein zweidimensionales Array, schließlich schreibst du nSize*nSize, und das ist 100, aber nicht zweidimensional.
Ein zweidimensionales Array ist eigentlich ein Array von Zeigern, die wiederum auf einen Speicherbereich zeigen (also selbst arrays sind). Wenn du darüber ein bisschen nachdenkst, kannst du ein solches Array auch selber deklarieren. Für dynamische Speicherbeschaffung brauchst du ja nur einen Pointer und das Schlüsselwort new
-
Hi!
Habe dazu gerade auch mal beim rumprobieren ein Problem festgestellt.
Mache ich etwas falsch oder kriegt der MS-Compiler das wirklich nicht gebacken?:int pMap[10][20]; int x=3, y=7; pMap[x*sizeof(pMap[0])+y] = 5;
Ich rechne nur auf einen Index um, es kommt aber folgende Fehlermeldung:
c:\....\main.cpp(15): error C2440: '=': 'int' kann nicht in 'int [20]' konvertiert werden
Die Fehlermeldung kommt auch wenn ich eine Zuweisung so tätigen will. Intern werden die doch als Eindimensionales Feld behandelt.
Code-Hacker
-
Die Formel y*Breite+x betrifft nur eindimensionale Arrays, die wie zweidimensionale Arbeiten sollen. Außerdem ist mit Breite nicht sizeof (datentyp) gemeint, sondern z.B. 10, für ein [20][10] Array (20 währe die höhe).Edit: Wenn der Compiler einen Fehler meldet, darfst du grundsätzlich davon ausgehen, das du und nicht der Compiler einen Fehler gemacht hast.
-
Hi!
@Randa:
Achso, hatte gelesen das 2 dimensionale Array wirklich so abgebildet werden können.EDIT: Wobei ich mit sizeof(feld[0]) doch eigentlich die Größe der Breite bekommen müsste oder? Also eigentlich 20, bekomme allerdings 80 raus.
EDIT: Argh. Hat sich erledigt!
Code-Hacker
-
nein, sizeof (feld[0]) ist die größe der Varaiblen feld[0], und das ist bei zweidimensionalen Arrays ein Zeiger und hat immer die größe 4 bytes bzw. 8 bytes bei 64 Bit Systemen.
-
Hi!
Jepp, genau das ist mir eben auch wieder klar geworden. Peinlich irgendwie, genau das habe ich noch für ne Klausur gelernt (richtig!) und auch noch mit anderen diskutiert und erklärt und jetzt mache ich es selbst falsch...
EDIT: So wäre es richtig gewesen:
(sizeof(myMap)/sizeof(myMap[0][0])) / (sizeof(myMap)/sizeof(myMap[0]))
Code-Hacker
-
Hej,
so jetzt gehts wie ichs will
Danke an alle fure die schnellen Antworten
ByeBye, Viking69
-
randa schrieb:
nein, sizeof (feld[0]) ist die größe der Varaiblen feld[0], und das ist bei zweidimensionalen Arrays ein Zeiger und hat immer die größe 4 bytes bzw. 8 bytes bei 64 Bit Systemen.
Nö
int a[10][50]; cout << sizeof(a[0]); // = sizeof(int) * 50
-
Hi!
Argh, ich lese auch nur die hälfte....
Allgemein:
a[0] ist bei einem zweidimensionalen Array
Größe des Datentyps * Größe der zweiten DimensionCode-Hacker
-
Code-Hacker schrieb:
Hi!
Argh, ich lese auch nur die hälfte....
Allgemein:
a[0] ist bei einem zweidimensionalen Array
Größe des Datentyps * Größe der zweiten DimensionCode-Hacker