Mehrdimensionale Array an Funktion übergeben
-
Hallo!
Wie kann ich eine mehrdimensionale Array an eine Funktion übergeben? Leider bekomme ich immer die selbe Fehlermeldung
Warum klappt es nicht mit "*ACode[256]" oder "**ACode"?
Viele Grüße
pmwVersuch 1:
void ErzeugeCodeTabelle(bool *ACode[256]) { } int main() { bool ACode[256][256]; ErzeugeCodeTabelle(ACode); /* Fehlermeldung */ }
cannot convert `bool (*)[256]' to `bool**' for argument `3'
Versuch 2:
void ErzeugeCodeTabelle(bool **ACode) { } int main() { bool ACode[256][256]; ErzeugeCodeTabelle(ACode); /* Fehlermeldung */ }
cannot convert `bool (*)[256]' to `bool**' for argument `3'
-
Hallo,
Da du die ausmaße deines Array kennst kannst du schreiben.
void foo(bool p[256][256]){ //tu was } bool test[256][256]; foo(test);
Du kannst aber auch mit nem einfachen Zeiger arbeiten und ihn auf 2 Dimensionen umrechnen. Dazu wurde schon öfter was gepostet.
-
Ich müsste schon mit Zeigern arbeiten, da "ACode" in der Funktion geändert wird. Abe leider habe ich weder mit der Forumsuche noch mit Google etwas gefunden
Ich habe keine Ahnung was ich an die Funktion übergeben soll.
-
Ok,
Also C behandelt mehrdimensionale Felder wie Eindimensionale.
Die Elemente werden so abgelegt.Bsp:
int a[5][6];
a[3][5]=4;
Bei dieser Zuweisung passiert folgendes.
a[3*6+5]=4;
Das geht deswegen weil die abbildung des arrays im Speicher so aussieht:
a[0][0], a[0][1] ... a[0][6],a[1][0],a[1][1].....
Du kannst also einen Zeiger übergeben.
void foo(bool *arr){ //auf arr[3][4] zugreifen arr[3*256+4]=true; }
-
http://www.c-plusplus.net/forum/viewtopic.php?t=74815
http://www.c-plusplus.net/forum/viewtopic.php?t=74742benutzt doch einfach mal die Suche, das hier war sogar noch auf der ersten Seite
-
Hallo!
Vielen Dank für die Erklärung prolog
Die habe ich im Gegensatz zu de Links sehr gut verstanden.
Geht nicht, Warum?
void ErzeugeCodeTabelle(bool *ACode) { } int main() { bool ACode[256][256]; ErzeugeCodeTabelle(ACode); /* Fehlermeldung */ }
cannot convert `bool (*)[256]' to `bool**' for argument `3'
Das hier geht aber, auch wenn es nicht ganz so schön aussieht:
void ErzeugeCodeTabelle(bool *ACode) { } int main() { bool ACode[256*256]; ErzeugeCodeTabelle(ACode); /* Fehlermeldung */ }
-
Hallo,
Naja es geht deswegen nicht weil bool t[256][256] eben ein zweidimensionales Array währen t[256*256] ein eindimensionales Array ist, was aber genauso verwendet werden kann wie ein eindimensionales. Die Funktion erwartet einen Zeiger auf bool bzw. in unserem Fall die Addresse an der das eindimensionale Array beginnt.
Kurzum man übergibt den falschen Typ und das verursacht zu Recht den Fehler.
Deine zweite Lösung ist ja gleichbedeutent mit der ersten.
-
// Das hier geht alles:
void ErzeugeCodeTabelle(bool ACode[][256]);
void ErzeugeCodeTabelle(bool ACode[256][256]);int main()
{bool ACode[256][256];
ErzeugeCodeTabelle(ACode);}