Mehrdimensionale Arrays und Zeiger auf diese
-
Hi.
Eindimensionale Arrays und Zeiger arbeiten wunderbar zusammen.
Wenn ich aber mit Mehrdimensionalen Arrays arbeiten will, klappt garnichts mehr.int MyArray[15][20];
Ich möchte dieses Array in einer Funktion übergeben und es soll direkt mit dem Array gearbeitet werden und nicht mit einer Kopie.
Anders gesagt ich würde jetzt gerne einen Zeiger auf dieses Array legen wollen und die 15x120 Arrays mit Werten füllen wollen.Kann mir einer sagen wie?
So einfach wie mit Eindimensionalen klappt ja nun leider nicht mehrint MyArray[5]; MyArray[1] = 2; int *ptr = MyArray; ptr[3]=100; printf("%d %d",ptr[1],ptr[3]);
-
benutz c++ ströme
-
Du meinst jetzt nicht wirklich, das ich weiss wovon du redest oder?
-
Hi!
Du musst einen Zeiger nehmen an den du das Array übergibst und desweiteren musst du die Größen der Dimensionen übergeben:
void fuellen(int* arr, int dim1, int dim2) { for(int i=0; i<dim1; ++i) for(int j=0; j<dim2; ++j) arr[dim1][dim2] = 0; } // Aufruf: fuellen(&MyArray[0][0], 15, 20);
Code-Hacker
-
Ne das klappt ja so nicht. Den Code selber mal probiert? Zumal arr[dim1][dim2] = 0; => arr[i][j] = 0; aber das jetzt mal total nebensächlich und man weiss was du meintest.
Jedoch meldet Compiler "Unzulässiger Indexoperator" in der Zeile.
-
Hi!
Sorry, hast recht. Aber es funktioniert, siehe bei meinem Dozenten (zumindest wegen des Funtkionsaufrufes):
http://www.fh-wedel.de/~si/vorlesungen/c/felderUndZeiger/mehrdimfelder.html
Außerdem habe ich diese Lösung auch im Stroustrup gelesen.Aber ich habe etwas zu schnell geschrieben, so sollte es funktionieren:
void fuellen(int* arr, unsigned dim1, unsigned dim2) // Negative Zahlen unzulässig { for(unsgined i=0; i<dim1; ++i) for(unsgined j=0; j<dim2; ++j) arr[i*dim2+k]=0; // 1-dimensionaler Zugriff } // Aufruf: fuellen(&MyArray[0][0], 15, 20);
Du kannst bei den Indexgrößen keine evtl. negativen Zahlen angeben, also unsigned. So sollte es funktionieren. Wobei ich glaube eher das Problem war das ich versucht habe zweidimensional zuzugreifen und nicht eindimensional.
Code-Hacker
-
Yeah!! Danke dir!
-
Hallo
Da ich gesehen habe, dass ihr meinem Vorgänger so gute Tipps geben konntet, hoffe ich, dass ihr auch auf meine kleine Erweiterung/Änderung der Frage eine Antwort kennt.
Ich habe ein Array von Zeigern. Jeder Zeiger zeigt auf ein anderes Objekt im heap. (Zweck des Ganzen: Diese Objekte haben Eigenschaften, auf welche ich in einer Funktion zugreifen will. (z.B. benötige ich von Jedem Objekt den Wert aus der Variable a)).
Wie müsste die Deklaration und die Definition der Funktion aussehen damit dies funktioniert? Wie der Funktionsaufruf?
Ich bekomme immer die Fehlermeldung dass der Zeiger nicht definiert ist. (Borland c++ builder 5)