Adresse von 2 Dimensionalen Feld (array) an Funktion übergeben



  • Mogen,
    tja ich hab das probem das ich die Adresse eines Array (2D) an eine Funktion übergeben will. Die funktion soll werte einlesen.

    Wenn ich zum beispiel die adresse eines strings an eine Funtion übergeben will geht das ohne Probleme.
    Ich kann dann auch in der Funktion auf das array (string) zb. mit array [3] = 'a' ; oder mit *(array+3)='a'; zugreifen.

    Das alles funtioniert aber nicht mehr wenn ich die Adresse eines 2D Arrays übergeben will. Dann kommen Fehler beim zugriff mit array[4][5] = 3 ; (compiler verlang ein Array).

    In meinen Büchern steht kein wort über so eine übergabe.

    Hat einer ne idee??

    mfg
    kn@cke



  • Ein zweidimensionales Array gibt es in C nicht - das ist ein Array von Arrays. Deshalb muß bei der Übergabe die innerste Dimension bekannt sein:

    void get_2d(int val[10][])
    {
      val[2][1]=4711;
    }
    
    int main()
    {
      int values[10][10];
      get_2d(values);
    }
    


  • Ohne mich jetzt konkret mit deinem Problem auseinandergesetzt zu haben würde ich mal eine kleine Empfehlung aussprechen:
    Benutze lieber 1dimensionale Felder. Der Umgang mit diesen ist einfacher und unproblematischer, auch z.B. beim Allocieren von Speicher.

    Anstatt
    int b[x_size][y_size];
    lieber
    int b[x_size * y_size];
    und den Zugriff z.B. an der Stelle (x,y) mit
    b[y*x_size + x]



  • jo danke erstmal.

    ich hab das array jetzt in eine structur gepackt dann kann ich die adresse der structur übergeben. funktioniert gut.

    Aber ich werd das mal ausprobieren mit dem [x_size] [y_size]

    Danke
    mfg
    kn@cke



  • CStoll (off) schrieb:

    Ein zweidimensionales Array gibt es in C nicht - das ist ein Array von Arrays. Deshalb muß bei der Übergabe die innerste Dimension bekannt sein:

    void get_2d(int val[10][])...
    

    genauer: nur die aeusserste darf unbekannt sein. die innersten dimensionen muessen bekannt sein (wenn sie denn existieren).
    also z.b. ist das okay:

    void get_2d(int val[][10][100][3][5][42],...)
    void foo(bar[],...)
    

Anmelden zum Antworten