Mehrdimensionale Arrays einer Funktion übergeben / wieder zurückgeben
-
Ich habe lange im Netz gesucht, doch zu meinem Problem keine passende Lösung gefunden. (Vielleicht auch nur übersehen)
Für ein Programm brauche ich ein mehrdimensionales Array für verschiedene Berechnungen.
Dabei habe ich es in main() erstellt mit:
p=(int**)malloc(len*sizeof(int*)); for(i=0;i<len;i++) p[i]=(int*)malloc(l[i]*sizeof(int));
len und l[i] werden im Programm berechnet.
Nun möchte ich einer Funktion
int Wert(....)
Das gesamte Array übergeben, um die einzelnen Werte dort zu berechnen.
Möglich wäre auch eine Übergabe im Sinne:
for(i=0;i<len;i++) Wert();
Ich weiß zwar, dass man einzelne Arrays über Zeiger und Adressen mit einer Funktion austauschen kann, kann es aber bei einem mehrdimensionalen Array nicht umsetzen. Die Versuche haben nur zu den verschiedensten Fehlermeldungen geführt.
Eine Funktion soll in diese Arrays Werte hineinschreiben, eine andere soll diese Werte dann zur Berechnung weiterer Werte nutzen, um diese dann wieder in andere Arrays zu schreiben.
Ich hoffe, jemand kann mir dabei helfen, dieses Problem zu lösen.
MFG
Luka
-
ein mehrdimensionaler Array wir auch mit einem zeiger übergeben du kannst hier nur die erste dimesnion offen lassen
void Funktion(int *Array[][20])
als kleines beispiel wie du einen mehrdimensionalen array übergeben kannst
-
GAMES schrieb:
ein mehrdimensionaler Array wir auch mit einem zeiger übergeben du kannst hier nur die erste dimesnion offen lassen
das wird ihm nicht helfen. er hat keine rechteckige matrix sondern die zeilen haben unterschiedliche längen.
-
Hallo. Mittlerweile habe ich das Problem lösen können.
Falls andere ähnliche Probleme haben, hier mein Beispielcode:#include <stdio.h> #include <stdlib.h> #include <string.h> void Count(int **p,int m,int *l){ int i,k; for(i=0;i<m;i++){ for(k=0;k<l[i];k++) p[i][k]=2*k+i; } } void Print(int **p, int *l){ int i,k; for(i=0;i<2;i++){ for(k=0;k<l[i];k++) fprintf(stderr,"%d\t",p[i][k]); fprintf(stderr,"\n"); } } int main(int argc,char**argv){ int **p,i,*l; l=(int*)malloc(2*sizeof(int)); p=(int**)malloc(2*sizeof(int*)); l[0]=7; l[1]=3; p[0]=(int*)malloc(l[0]*sizeof(int)); p[1]=(int*)malloc(l[1]*sizeof(int)); for(i=0;i<2;i++) Count(p,2,l); Print(p,l); for(i=0;i<2;i++){ free(p[i]); } free(p); free(l); return (0); }
MFG
Luka