Mehrdimensionale Arrays an Funktionen übergeben
-
Hallo,
ich habe in meinem Programm ein mehrdimensionales Array, das ich in einer Funktion füllen/auslesen/ändern möchte, allerdings kenne ich bisher keine Möglichkeit, das hin zu bekommen.
Einfaches Übergeben des Zeigers auf das Array funktioniert nicht, ich kann in der Funktion nicht auf die Indizes zugreifen.
Habe auch schon versucht, das Array in eine Struktur zu "verpacken", dabei tut sich aber beim Ausführen garnichts.Das Array stellt eine Art Karte dar, und soll nur int-Werte enthalten.
Gibt es da irgendeine Möglichkeit?
Gruß, U-Boot
-
U-Boot schrieb:
Einfaches Übergeben des Zeigers auf das Array funktioniert nicht, ich kann in der Funktion nicht auf die Indizes zugreifen.
mach 'nen 'typedef' für ein so einen typ mit der anzahl dimensionen, die du brauchst. dann kannste bequem pointer herumreichen.
-
typedef-fan schrieb:
U-Boot schrieb:
Einfaches Übergeben des Zeigers auf das Array funktioniert nicht, ich kann in der Funktion nicht auf die Indizes zugreifen.
mach 'nen 'typedef' für ein so einen typ mit der anzahl dimensionen, die du brauchst. dann kannste bequem pointer herumreichen.
Ah, danke, das werd ich ausprobieren, warum komm ich auf sowas nicht selbst!?
Gruß, U-Boot
-
Hmmja, wär ich registriert würd ich meinen Beitrag bearbeiten... Naja egal.
wie rum muss ich das nu drehn?
typedef int feld[30][15];
oder
typedef int[30][15];
funktioniert jedenfalls beides nicht (VC++6)
Gruß, U-Boot
-
so sollte es gehen:
typedef int feld[30][15]; ... feld ein_feld, *feld_ptr; // ein feld und einen pointer anlegen feld_ptr = &ein_feld; // pointer darauf ueigen lassen ...
-
Habe das Programm jetzt mal auf ein Minimum reduziert:
#include <stdio.h> typedef int field[32][17]; void printout(field *Feld) { int i, j, f; for(j=0; j<17; j++) { for(i=0; i<32; i++) { f = *Feld[j][i]; if(f==0) printf(" "); else if(f==6) printf("o"); } printf("\n"); } } int main() { int i,j; field Field; for(i=0; i<17; i++) { for(j=0; j<32; j++) { Field[j][i]=6; } } for(i=1; i<=15; i++) { for(j=1; j<=30; j++) { Field[j][i]=0; } } printout(&Field); getchar(); return 0; }
Leider wird nur die erste Zeile ausgegeben, also Field[0][0]-Field[0][31] ausgegeben, in den darauffolgenden Zeilen hätte ich nur irgendwelche zufälligen Zahlen laut Debugger.
Mittendrin bricht das Programm auch ab ("minimalprogramm.exe hat ein Problem festgestellt und muss beendet werden.")Ein Fehler scheint also schonmal beim befüllen zu entstehen, den anderen kann ich gerade nicht zuordnen
Gruß, U-Boot
edit by Tim: cpp-Tag geschlossen.
-
Argh, noch während dem Abschicken gemerkt, dass der [cpp]-Tag nicht wieder geschlossen war, sorry.
Werde mich besser mal registrieren, dass mir das nicht mehr passiert.Gruß, U-Boot
-
U-Boot schrieb:
Argh, noch während dem Abschicken gemerkt, dass der [cpp]-Tag nicht wieder geschlossen war, sorry.
Ausnahmsweise werde ich das mal fixen
U-Boot schrieb:
Werde mich besser mal registrieren, dass mir das nicht mehr passiert.
Du kannst auch als unreg die Vorschau verwenden.
-
Tim schrieb:
Ausnahmsweise werde ich das mal fixen
Danke
Tim schrieb:
Du kannst auch als unreg die Vorschau verwenden.
Schon, aber ich weis halt i.d.R. wie mein Geschreibsel ausschaut und verwende eher selten die Vorschau. Aber ab sofort kann ich den Beitrag dann immernoch ändern.
Gruß, U-Boot
-
Du hast deine beiden Feld-Indizes vertauscht:
f = Feld[i][j];
Und das Dereferenzieren brauchst du auch nicht, da du ja im Array keine Zeiger speicherst, sondern Werte.
-
Tatsächlich, in der Ausgabefunktion hab ich mich vertan.
Allerdings habe ich nach wie vor das gleiche Problem mit den zufälligen Werten, schon bevor ich in die Funktion komme.Dereferenzieren muss ich scheinbar schon, sonst meint der Compiler nur
error C2440: '=' : 'int [17]' kann nicht in 'int' konvertiert werden
Kann natürlich auch am Dereferenzieren liegen, dass ich da den Programmabsturz-Fehler bekomme, glaube das aber nicht so direkt.
Gruß, U-Boot