Zeiger auf zweidimensionales Array
-
Hallo,
ich habe ein zweidimensionales Integer-Array:int field[14][20]
nun will ich einen Zeiger auf das Array an eine Funktion als Parameter übergeben:
void createMap(????int????arry????) // Wie muss das aussehen?
Wie stelle ich das an?
Vorab schonmal danke für Eure Hilfe
Martin
-
void foo (int arr[14][20]) { }
Edit: Der unter mir hatte recht :p
MfG SideWinder
-
falsch SideWinder
-
Dabei kommt mir, was soll an meiner vorherigen Version falsch gewesen sein? Ist klar, dass er sein array casten muss beim Übergeben, aber nur so bekommt er seinen Zeiger?!
MfG SideWinder
-
Was war denn deine vorherige Version?
-
void func (int* arr); int main () { int arr [5][5]; func((int*)arr); }
Nur muss er dann in func() eben mit Zeigerarithmetik an sein Array kommen.
MfG SideWinder
-
*kotz*
-
hier steht wie man es richtig macht:
-
Die einzige Lösung die auch so richtig true ist ist diese:
int pseudo_func (int ** pp) { return echte_func ((void *)pp); } int echte_func (void * p); int main () { int arr[5][14]; cout << pseudo_func (arr); }
-
Danke, es hat funktioniert. Falls es jemand interessiert die Lösung sieht so aus:
Meine Funktion die mit dem Array arbeiten soll lautet:
void createRoute(inout int (*field)[20]);
Der Aufruf sieht so aus:
int field[14][20]; int (*p)[20] = field; createRoute(p);
Gruss
MartinPS: inout ist per define definiert und dient lediglich zur besseren Lesbarkeit:
#define inout
-
omg, das sieht ja eklig aus
-
dEUs schrieb:
omg, das sieht ja eklig aus
Da finde ich SideWinders Lösung am besten:
void foo (int arr[14][20]) { }
Es geht auch noch so:
void foo (int (*arr)[20]) { } // und void foo (int arr[][20]) { } // Aufruf: foo(arr);
-
Hi!
Also es wäre dies möglich:
SideWinders Möglichkeit, da dort die Größe bereits zur Kompilierzeit bekannt ist:void foo (int arr[14][20]);
Natürlich dies, also maanhe's Lösung:
void createRoute(inout int (*field)[20]);
Wobei ich dies schöner finde:
void createRoute(int field[][20]);
Oder dies, geht genau so:
void createRoute(int *field);
Hier muss dann allerdings das zweidimensionale Feld als eindimensionales Feld behandelt werden, dazu müsste man dann allerdings noch die Feldgrößen mit übergeben sofern diese nicht bekannt sind und wenn sie bekannt sind, kann man gleich wieder die erste Lösung verwenden. Ich würde hier die 1. oder 2. Lösung bevorzugen.
Code-Hacker
-
Wenn die Arraygröße wirklich fest ist, wären die einzigen typsicheren Lösungen:
// Einfach typedef int Field[14][20]; void foo(Field& f); Field meinFeldchen; foo(meinFeldchen); // Bei typedef-Allergie (?) void foo(int (&f)[14][20]); int meinFeldchen[14][20]; foo(meinFeldchen);
(Ungetestet.)
Im Beitrag über mir sind wegen Cs fragwürdigen Array-Parameter-Regeln #1 und #3 dasselbe, AFAIK.