sizeof und Array?
-
(A):
int iArray[6]; int iSize= sizeof(iArray)/sizeof(int);(B):
int *iArray= new int[6]; int iSize= sizeof(iArray)/sizeof(int);A: iSize ok, B: iSize nicht ok.
Aber warum.. weil eins aufm Stakc ist udn das andere aufm Heap??
iArray aus A ist ja inter auch ein Pointer oder?Erklärung bitte:)
-
Kurz und knapp:
A ist ein Array, welches implizit in einen Pointer auf das erste Element umgewandelt werden kann.
B ist ein Pointer, der auf das erste Element eines Array zeigt.Das ist nicht das gleiche.
-
BorisDieKlinge schrieb:
Aber warum.. weil eins aufm Stakc ist udn das andere aufm Heap??
iArray aus A ist ja inter auch ein Pointer oder?Nein, iArray in (A) ist ein Array. Arrays sind keine Zeiger. Unter bestimmten Bedingungen wird ein Array in einen Zeiger auf das erste Element umgewandelt.
Im zweiten Beispiel liefert dir sizeof(iArray) eben sizeof(int*).
sizeof wird bereits zur Compilezeit ausgewertet. Stell dir vor, da stünde nicht 6, sondern eine Variable. Wie soll der Compiler zur Compilezeit wissen, welchen Wert die Variable hat?
Mit Stack und Heap hat das nur indirekt etwas zu tun, weil du eben dynamische Arrays nicht auf dem Stack anlegen kannst.
-
ok gut danke:)