Bestimmen Sie die Größe eines C++ - Arrays programmgesteuert?

Diese Frage wurde inspiriert durch eine ähnliche Frage: Wie funktioniert delete[] "weiß" die Größe des Operanden-array?

Meine Frage ist ein wenig anders: gibt es eine Möglichkeit, bestimmen die Größe eines C++ - Arrays programmgesteuert? Und wenn nicht, warum? Jede Funktion, die ich gesehen habe, dass dauert ebenfalls ein Feld erfordert einen integer-parameter, um ihm die Größe. Aber wie der verlinkte Frage darauf hingewiesen, delete[] müssen wissen, die Größe des Speichers freigegeben werden.

Betrachten dieser C++ - code:

int* arr = new int[256];
printf("Size of arr: %d\n", sizeof(arr));

Diese Drucke "Size of arr: 4", die nur die Größe des Zeigers. Es wäre schön, eine Funktion zu haben, die druckt 256, aber ich glaube nicht, dass man existiert in C++. (Nochmals, die Frage ist, warum es nicht existiert.)

Klärung: ich weiß, dass wenn ich deklariert das array auf dem stack statt dem heap (d.h. "int arr[256];"), dass die sizeof operator zurückkehren würde, 1024 (array length * sizeof(int)).

  • Eigentlich, wenn Sie zugewiesen das array auf dem stack der sizeof-operator zurückkehren würde, 1024 -- die 256 (Anzahl der Elemente) * 4 (die Größe eines einzelnen Elements). (sizeof(arr)/sizeof(arr[0])) geben würde, das Ergebnis 256.
  • danke, habe ich übersehen, weil ich war eigentlich mit char[] in meinem test-code (und sizeof(char) == 1)
  • Es ist zwar nur hypotethical - da funktioniert es nicht - ich habe darauf hinweisen, dass Sie geschrieben haben soll printf("Size of arr: %d\n", sizeof(*arr)); statt printf("Size of arr: %d\n", sizeof(*arr)); denn Sie wollen zum abrufen der Größe des dereferenzierter Zeiger.
InformationsquelleAutor Kip | 2008-10-13
Schreibe einen Kommentar