C: Wie übergebe ich 2 dim. Feld?

Folgender Fall:

#define DIM_X 30
#define DIM_Y 15

int ausgabe_Torus(short int Torus[DIM_Y][DIM_X])
{

}

int main(int argc, char *argv[])
{

short int ppsiTorus[DIM_Y][DIM_X];

}

Wie rufe ich jetzt die Unterfunktion auf?
ppsiTorus ist ja schon **, die Unterfunktion braucht **, also sollte doch

ausgabe_Torus(ppsiTorus);

funktionieren.

Tut es aber nicht, genauso wie alles andere, was ich schon ausprobiert habe.
Auch die Definition von ausgabe auf "int ausgabe_Torus(short int **Torus) zu ändern hat nichts gebracht…

Ein kleiner Tipp?

Lösung
Kann C wohl nicht…

Wenn man das 2 dim. Feld aber dynamisch anlegt, klappt alles.

Hi.
Versuch doch mal

typedef int DIM2MAT[DIM_Y][DIM_X];

int aufrufendeFunktion()
{
DIM2MAT matrix;
matrix[1][1]=1;
//etc.
int ergebnis=AufgerufeneFunktion(&matrix);
}

int AufgerufeneFunktion(DIM2MAT* matrixzeiger)
{
(*matrixzeiger)[2][2]=wert;
}

So oder ähnlich muss es gehen. Ich hab das bei mir funktionierende Beispiel nur leider gerade nicht zur Hand, kanns aber nochmal nachschauen.

Gruss, Moriarty

Hi,

hier ein kurzes Beispielprogramm in „reinem“ C-Code:

#include 

/\* Prototyp \*/
void mataus(int M[][3], int Ze, int Sp);

void main(void)
{
 int M[3][3] = {{1,2,3},{4,5,6},{7,8,9}};

 mataus(M, 3, 3);
}

void mataus(int M[][3], int Ze, int Sp)
{
 int i, j;
 for (i=0; i

Statische mehrdim. Arrays bilden in C eine Sonderrolle, da diese 1-dimensional implementiert werden. Bei der Deklaration von n-dim statischen Arrays ist es daher obligatorisch die letzten (n-1) Indizes mit den "Dimensionszahlen" zu benennen (hier 3).
Ich benutze in der Regel bei solchen Fällen eindimensionale Arrays:
int M[3\*3];
Die Indizierung erfolg zB. so: k = M[3\*i+j] 
oder dynamische Arrays

Gruß Frank :smile: