Ich bin gerade dabei wieder etwas intensiver in die C / C++ Programmierung einzusteigen und mache deswegen ein paar Auffrischungs-Uebungen. :)
Jetzt bin ich auf etwas gestossen, was mir nicht so recht einleuchtet:
Code: Alles auswählen
const char buffer1[] = "Hallo";
cout << sizeof(buffer1) << endl;
const char* buffer2 = "Hallo";
cout << sizeof(buffer2) << endl;
Also ich meine, bei buffer2 gibt er allem Anschein nach die Grösse des char-pointers zurück.
Aber ich frage mich: wieso?
buffer1, ohne die Index-Klammern, steht doch einfach für die Adresse des ersten Elementes.
Und buffer2 ist ebenfalls die Speicher-Adresse des erstes Elementes des Char-Arrays.
Also: buffer1 == &buffer1[0]
und: buffer2 == &buffer2[0]
sizeof() kriegt also in beiden Fällen einfach die Adresse des ersten Elementes übermittelt.
Demnach müsste sizeof() doch auch zweimal den selben Wert ausgeben.
Wie kann ich denn den genutzten Speicher ermitteln, wenn ich einen Pointer auf ein Array habe, wie im zweiten Fall?
Streng genommen braucht Methode eins doch mehr Speicher (ab vier Buchstaben), da der String sich nun zweimal im Stack befindet. Einmal als const char-Array "Hallo" und einmal in Form des arrays buffer[].
Folglich müsste doch die Methode
Code: Alles auswählen
const char* buffer = "Hallo";
Gruss starcow