Array an Funktion



  • Hallo! Ich möchte ein zweidimensionales Array an eine Funktion als Argument übergeben. Das Array kann aber verschiedenen Größen haben. Bis her will ich es so machen, aber das geht so nciht. Wie ist es richtig?:

    bool SetData(meTiles** Tiles);   // Ein unbekanntes zweidimensionales Array
    
    // so möchte ich es erstellen udn übergeben:
    meTiles Tiles[3][3] = { { 0, 1, 2 },
                            { 1, 3, 4 },
                            { 4, 2, 5 } };
    
    SetData(&Tiles);  // so gehts aber nciht.
    
    zugreifen will ich dan in der Funktioni so:
    bool SetData(meTiles** Tiles)
    {
      m_Tile = Tiles[1][2];
    }
    

    Was muss ich da machen?

    Gruß, Maxi



  • wie wär's mit

    void SetData (myTiles (*tiles)[3]);
    


  • Das versteh ich nciht, was soll das sein?

    (myTiles (*tiles)[3])

    Was bezweckt man damit?



  • hm sorry hab mich wohl etwas kurz gefasst.
    hier etwas ausführlicheren code:

    void SetData(int (*Tiles)[3]) {
      int m_Tile = Tiles[1][2];
    }
    
    int main() {
    	int Tiles[3][3] = { { 0, 1, 2 },
       	                 { 1, 3, 4 },
          	              { 4, 2, 5 } };
    	SetData(Tiles);
    }
    


  • Hm, naja immerhin, klapt ja 🙂

    Aber, warum geht das, und was hast du da gemacht, was bedeutet (*Tiles)? Das bedeutet doch in dereferenzierte Tiles umwandeln, oder? und dann [3] dahinter, das sind doch 3 Elemente oder?

    Aber ich brauch doch für beliebeig viele Elemente, geht das uch irgendwie?



  • int (*x)[3] ist ein zeiger namens x auf arrays von 3 integern.
    wenn du das nicht willst, dann einfach wie üblich einen zeiger auf das erste element des arrays übergeben. dann gehen dir eben die dimensionen verloren.



  • @davi

    Ich möchte auch einen Array an eine Funktion als Referenz übergeben. Mein erster Ansatz sieht so aus:

    //funktion
    void func(int& einArray[],int size) {
        for(int i=0;i<size;++i)
            einArray[i]=i;
    }
    
    int main() 
    {
        int array[10];
        func(array,sizeof(array)/sizeof(int));
    
        return 0;
    }
    

    Klappt aber nicht. Auch nicht, wenn 'einArray' ein Zeiger.

    Bitte um Aufklärung. 🙂



  • noch ein problem schrieb:

    @davi

    Ich möchte auch einen Array an eine Funktion als Referenz übergeben. Mein erster Ansatz sieht so aus:

    //funktion
    void func(int& einArray[],int size)
    [...]
    

    Klappt aber nicht.

    Dein Parameter ist keine Referenz auf ein Array, sondern ein Array von Referenzen. Und Referenzen können nicht Elemente eines Arrays sein.
    Desweiteren kannst du keine Referenz auf ein Array bilden, ohne die Größe anzugeben.

    Wenn du einen guten Compiler hast, kannst du bei einem 1-Dimensionalen Array z.B. folgendes machen:

    //funktion 
    template <unsigned size>
    void func( int (&einArray)[size]) { 
        for(int i=0;i<size;++i) 
            einArray[i]=i; 
    } 
    
    int main()  
    { 
        int array[10]; 
        func(array); 
    
        return 0; 
    }
    

Log in to reply