Arraygröße übermitteln



  • Ich brauche für eine Funktion die Größe eines Arrays, welches aber nur als Zeiger vorhanden ist. Bspl:

    void Funktion( int *Array )
    {
    int size = sizeof(Array);
    std::cout << size;
    }
    

    So kommt aber bei meinem Array welches 10 Member hat, nur eine Größe von 4 raus. Was muss ich anders machen?



  • MrBambi schrieb:

    Ich brauche für eine Funktion die Größe eines Arrays, welches aber nur als Zeiger vorhanden ist. […]
    So kommt aber bei meinem Array welches 10 Member hat, nur eine Größe von 4 raus. Was muss ich anders machen?

    Die Größe des Arrays mitübergeben oder die Daten als std::array oder std::vector oä. übergeben.


  • Mod

    Array ist ein Zeiger. Folglich entspricht sizeof Array der Größe eines Zeigers.

    Was muss ich anders machen?

    Die Größe irgendwie anders bekommen.

    Einige Möglichkeiten:

    void Funktion( int *Array, std::size_t size ) // Explizit angeben
    
    template <std::size_t N>
    void Funktion( int (&Array)[N] ) // N ist die Größe, deduziert - funktioniert nur bei echten Arrayobjekten als Argumenten
    
    void Funktion( int* first, int* last ) // last zeigt auf die Adresse hinter dem letzten Element. last - first ergibt die Größe
    

    Ich würde dir eigentlich eine Lösung mit Templates und Iteratoren zeigen, bin aber unsicher ob du diese verstehen würdest.

    @nman: Seit wann treibst du dich im C++-Board rum? 🤡



  • Ich kann nur die Größe des Arrays nicht mitangeben da sich diese immer wieder verändern kann.


  • Mod

    MrBambi schrieb:

    Ich kann nur die Größe des Arrays nicht mitangeben da sich diese immer wieder verändern kann.

    Doch aber nicht während des Funktionsaufrufs. Die Größe wirst du doch stets vor dem Aufruf kennen, also sehe ich da kein Problem.



  • MrBambi schrieb:

    Ich kann nur die Größe des Arrays nicht mitangeben da sich diese immer wieder verändern kann.

    Darum nimmst du einfach das:

    template <std::size_t N>
    void Funktion( int (&Array)[N] ) // N ist die Größe, deduziert - funktioniert nur bei echten Arrayobjekten als Argumenten
    {
        cout << "Array hat " << N << " Elemente.";
    }
    

    Die Variable N hat die Größe deines Arrays. Einfach N benutzen.



  • Dann musst du dafür eine Variable benutzen.

    An der Stelle, wo das Array definiert wird, ist die Größe auch bekannt.
    Da funktioniert sizeof richtig

    Bedenke aber, das sizeof die Göße in Bytes angibt und nicht die Anzahl der Elemente.

    Die bekommst du mit sizeof(array)/sizeof(*array)

    ~Edit, Arcoth: Tags korrigiert.~



  • Perfekt. Habe jetzt eine Lösung gefunden. Danke euch!


Anmelden zum Antworten