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.
-
Array ist ein Zeiger. Folglich entspricht
sizeof Arrayder 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ößeIch 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.
-
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 funktioniertsizeof richtigBedenke 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!