Pointer auf Array: Größe des Arrays herausfinden
-
Hallo,
ist wahrscheinlich relativ simpel, ich komme trotzdem nicht weiter:sizeof(xy)
liefert mir den verwendeten Speicher einer Variable zurück.
Die Anzahl der Elemente eines statischen Arrays erhalte ich folglich mitsizeof(myarr) / sizeof(myarr[0])
Das funktioniert auch soweit ganz gut.
Habe ich nun aber einen Pointer auf das array zeigen, so funktioniert das Ganze dummerweise nicht mehr.sizeof(ptr[0])
liefert mir zwar noch den Speicherbedarf des ersten Arrayelements,
sizeof(ptr)
liefert dafür aber dummerweise den Speicherbedarf des Pointers.
Kann mir jemand weiterhelfen?
Bei dynamischen Arrays kann ich per myarr.High und myarr.Low die Grenzen finden. So etwas gibt es bei statischen nur irgendwie nicht...
-
Hallo,
Genau, so etwas gibt es bei Arrays nicht. Deswegen solttest du dir die Arraygröße merken. Du kannst eben auch dynamische Arrays oder besser std::vector nehmen.
-
Wie gesagt, wenn ich nicht über einen Pointer auf das Array zugreife / zugreifen muss, dann kann ich dir Größe mittels sizeof(myarr) / sizeof(myarr[0]) ermitteln.
aber es muss doch auch eine Möglichkeit geben, das herauszufinden, wenn ich das Array über einen Pointer anspreche, oder?
-
Horschdware schrieb:
aber es muss doch auch eine Möglichkeit geben, das herauszufinden, wenn ich das Array über einen Pointer anspreche, oder?
Nein.
-
Hmm... schlecht...
Dann muss ich das anders lösen.
Ich habe eine Funktion, die ein Array per Call by Reference erwartet.
Konkret:void Bubblesort(int *input) { int i = 0, max = sizeof(input) / sizeof(input[0]; while (i < max) ... }
Wenn ich nicht erfahren kann, welches der höchste Index des Arrays ist, wie soll ich dann hier weitermachen? Diese Lösung kommt nicht in Frage:
void Bubblesort(int *input, int max)
-
Es gibt aber leider keine Andere.
-
Hallo
Um das hier abzuschließen : Alle hier sagen dir das richtige. Wenn du selber einen Speicher verwaltest, bist du auch selber für die Anzahl der Elemente on dynamischen Arrays verantwortlich. Du must also immer die Anzahl mitschleifen.
Dafür gibts aber auch in C++ spezielle Container wie std::vector, die genau dieses Problem beheben. Schau in unser Magazin hier im Forum, da gibts Artikel zu den STL-Containern.bis bald
akari