Übergabe von Array an Function?
-
Hallo wertes Forum,
seit einigen Tagen prügel ich mich mit der Übergabe eines zweidimensionalen Arrays an eine Funktion. Das Array soll als "Call by Reference" übergeben werden. Ein kleines Beispiel:
int fasel(char *Liste[10][150]); int main() { char Liste[10][150] fasel(&Liste); return 0; } int fasel(char *Liste[10][150]) { viel code return 0; }
Ich könnt ausflippen. Mein Compiler spuckt immerwieder Warunungen aus, die Dereferenzierungen würden nicht passen, oder die Anzahl der übergebenen Parameter stimmt nicht mit der Anzahl der formalen überein, usw...
Ich habs mit dem * in der Deklaration versucht, mit Grössenangaben für das Array, ohne *, ohne Grössenangabe, etc...
Das wirklich schlimme ist, ich hatte es schonmal soweit, dass es ohne Warnings kompiliert wurde, aber ich komm nicht mehr drauf. Meine dürftige C-Literatur schweigt sich zu diesem Problem auch beharrlich aus...
Ich hoffe mal hier kann mir jemand helfen.
Danke für eure Zeit,
Grüsse
Ein Newbie mehr
-
Huhu!
So sollte es gehn:
//.... char Liste[10][150] fasel(Liste); //... int fasel(char **Liste) { //...
[ Dieser Beitrag wurde am 23.06.2003 um 21:52 Uhr von xroads42 editiert. ]
-
und wieso "**"?
Gillt ein 2 dim Array als array von pointern auf char elemente?
-
char ** ist nicht richtig. char** ist ein Zeiger auf einen Zeiger auf char. Die Funktion erwartet aber einen char (*)[200]. Die erste Längenangabe kann man einfach weglassen. Damit kann man das also so schreiben:
void f(char (*x)[200]) // das gleiche wie char x[100][200] { // langer code } int main(void) { char x[10][200]; f(x); return 0; }
-
hmm, ich habe gelernt das bei char x[10][200]; x ein Zeiger auf ein Zeiger ist. Man lernt nie aus!
Rückfrage: Ist void f(char (*x)[200]) nicht ein wenig unfexibel?
Wäre dann
void f(char (*x)[],int anz11,int anz2)
nicht sinnvoller?( Ich müßte mal wieder was in C machen...Is scho lange her)
[ Dieser Beitrag wurde am 23.06.2003 um 22:26 Uhr von xroads42 editiert. ]
-
Danke Leute. Die Version von Mady hat problemlos funktioniert. Danke nochmal