2D Array an Funktion übergeben



  • Hallo,

    wie übergebe ich ein 2D Array an eine Funktion?

    Danke im Voraus

    MfG

    _C_



  • Mit einem pointer auf das erste Elemsnt, wenn die Funktion mit unterschiedlich großen 2D Feldern aufgerufen werden soll, sollte man
    die jeweils gültige Größe mit übergeben.

    #define Size_X 10
    #define Size_Y 32
    int main()
    {
    int err=0;
    double array[Size_X][SizeY];
    err=WorkArray(&array[0][0],Size_X,Size_Y);
    
    return(err);
    }
    
    int WorkArray(double *feld,int dim_x,int dim_y)
    {
    .....
    }
    


  • Vielen Dank für die Antwort, aber ich habe noch eine Frage :>

    Also, mit dem Beispiel was du mir gennant hast, übergebe ich ja nur das erste Element des 2D Feldes?! Wie kann ich jedoch das ganze Feld an die Funktion übergeben? Wenn ich z.B. das Feld[10][33] mit 1 initialisiere, wie kann ich in der Funktion auf das Feld [10][33] zugreifen?



  • Falsch, ich übergebe nicht das erste Element sondern einen Zeiger auf das erste Element, Wenn ich den Zeiger aufs erste Element habe, habe ich damit auch die auf alle Elemente.



  • Ok, das man das ganze Array übergibt habe ich jetzt gerafft (denk ich mal ;)), aber wie kann ich jetzt in der Funktion auf ein bestimmtest Element zugreifen? Mein Compiler (LCC) meldet egal was ich mache, "Type Error, Pointer Expected" 😞



  • Adresse des Zeigers erhöhen?

    ++feld;
    

    ^- Erhöht die Adresse und zeigt somit auf das nächste Element.

    Code-Hacker



  • Achtung bei der ++feld Lösung geht dir der Anfangf verloren den mußt du vorher sichern.

    Alternative dazu

    for (i=0;i<Size_X;i++)
       for(k=0;k<Size_Y;k++)
       {
       feld[i*Size_Y+k]=0; // Mach das mit dem Fald was du tun willst zum Beispiel 0 Setzen
       }
    


  • mal ne ganz blöde frage:
    wie wird eigentlich ein 2d-dimensionlaes array gespeichert? ist das auch wie bei nem normalen array in einer "reihe"? Also in einer reihe?



  • Moin,

    vielen Dank für eure Hilfe :> das Problem ist gelöst, das mit der Adresse hätte ich mir auch denken können 😉

    printf("\n -> %i",Feld[(Max_Y*Pos_X)+Pos_Y]);
    


  • Wenn das Array angelegt wird wird eine der größe entsprechende zusammenhängende Menge von Speicher reserviert
    den man dann als Feld oder Vektor benutzen kann.



  • Mehrdimensionale-Felder werden von C(++) intern Eindimensional verwaltet, es rechnet also von z.B. zwei- auf eindimensional um. Somit kann man durch eine enfache Rechnung die Position eines Elements im mehrdimensionalen Feld eindimensional ermitteln. Wenn man davon ausgeht das ein array nicht immer gleich groß ist geht benutzt man in einer Funktion Pointer und diese können nur auf eindimensionale Arrays angewandt werden, also muss das zweidimensionale auf eine Dimension umgerechnet werden.

    Code-Hacker


Anmelden zum Antworten