C-Strings
-
Ja, zumindest kann man das so sehen.
-
Also mein post war ..
Unnötig...Danke
-
Was soll denn bitte eine "Speicherzelle" sein? Die Beschreibung ist Mist...
-
Kellerautomat schrieb:
Was soll denn bitte eine "Speicherzelle" sein? Die Beschreibung ist Mist...
Öhm...
Dachte soetwas wie eine Variable das vll eine Variablen Speicherzelle (keine Ahnung kann es nicht besser Beschreiben deswegen frage ich ja) erstellt wird wo ein Wert gespeichert werden kann und darauf verweißt der Zeiger.
-
Skeptar schrieb:
Also mein post war ..
Unnötig...War er nicht, lass dich nicht so schnell verunsichern. Deine Vorstellung einer Speicherzelle im RAM, auf die ein Zeiger verweist, ist durchaus sinnvoll.
Nur würde ich statt "erstellen" eher "belegen" sagen, man spricht in dem Zusammenhang auch von Speicherallokation.
-
Okay super.
Und wird für den Zeiger ohne Zuweisung auf eine Adresse den Speicher benötigt?
-
Ja. In deinem Fall hast du den Zeiger als
int *p;
deklariert, er liegt also im automatischen Speicherbereich ("Stack").Das Objekt selbst benötigt immer gleich viel Speicher, egal welcher Wert drin steht. Das gilt auch für Zeiger.
-
Von *einer* Speicherzelle zu sprechen halte ich einfach fuer falsch. Man koennte von sizeof(int) Speicherzellen sprechen, aber auch das finde ich noch unschoen.
Stell dir einen Papierstreifen vor. Den Papierstreifen teilst du in gleich grosse Kaestchen auf. Jedes Kaestchen ist breit genug fuer eine 8-stellige Binaerzahl (ein Byte). Du nummerierst die Kaestchen der Reihe nach durch, faengst bei 0 an und nummerierst so lange, wie dein Streifen lang ist.
Wenn du jetzt einen int mit new allozierst, dann werden 4 aufeinanderfolgende Kaestchen (ein int bei dir vermutlich ist 4 Byte gross) gesucht, in denen noch keine Zahlen stehen. Wenn passende Kaestchen gefunden wurden, dann wird dir die Nummer des ersten Kaestchens gegeben. Das ist dann dein Pointer: Eine Zahl, eine Nummer.
-
Kellerautomat schrieb:
Stell dir einen Papierstreifen vor. Den Papierstreifen teilst du in gleich grosse Kaestchen auf.
Der C++-Standard gibt nicht vor, dass der Speicher ein zusammenhängendes char-Array ist.
-
language lawer schrieb:
Kellerautomat schrieb:
Stell dir einen Papierstreifen vor. Den Papierstreifen teilst du in gleich grosse Kaestchen auf.
Der C++-Standard gibt nicht vor, dass der Speicher ein zusammenhängendes char-Array ist.
Der C++-Standard gibt auch nicht vor, dass man sich Speicher als Papierstreifen vorstellen kann und dass es Kästchen hat.
-
language lawer schrieb:
Kellerautomat schrieb:
Stell dir einen Papierstreifen vor. Den Papierstreifen teilst du in gleich grosse Kaestchen auf.
Der C++-Standard gibt nicht vor, dass der Speicher ein zusammenhängendes char-Array ist.
Keiner hat davon gesprochen, dass es der einzige Papierstreifen ist.
-
Arcoth schrieb:
language lawer schrieb:
Kellerautomat schrieb:
Stell dir einen Papierstreifen vor. Den Papierstreifen teilst du in gleich grosse Kaestchen auf.
Der C++-Standard gibt nicht vor, dass der Speicher ein zusammenhängendes char-Array ist.
Keiner hat davon gesprochen, dass es der einzige Papierstreifen ist.
Sein System der Adressierung funktioniert dann aber nicht mehr.
-
Kellerautomat schrieb:
Von *einer* Speicherzelle zu sprechen halte ich einfach fuer falsch. Man koennte von sizeof(int) Speicherzellen sprechen, aber auch das finde ich noch unschoen.
Stell dir einen Papierstreifen vor. Den Papierstreifen teilst du in gleich grosse Kaestchen auf. Jedes Kaestchen ist breit genug fuer eine 8-stellige Binaerzahl (ein Byte). Du nummerierst die Kaestchen der Reihe nach durch, faengst bei 0 an und nummerierst so lange, wie dein Streifen lang ist.
Wenn du jetzt einen int mit new allozierst, dann werden 4 aufeinanderfolgende Kaestchen (ein int bei dir vermutlich ist 4 Byte gross) gesucht, in denen noch keine Zahlen stehen. Wenn passende Kaestchen gefunden wurden, dann wird dir die Nummer des ersten Kaestchens gegeben. Das ist dann dein Pointer: Eine Zahl, eine Nummer.Also nochmal die Frage. Wenn ich den Zeiger int *p; deklariere dann verweißt dieser auf keine Speicherzelle?
Erst wenn ichp = new int;
oder
p = &i
schreiben würde?
Nexus schrieb:
Ja. In deinem Fall hast du den Zeiger als int *p; deklariert, er liegt also im automatischen Speicherbereich ("Stack").
Das Objekt selbst benötigt immer gleich viel Speicher, egal welcher Wert drin steht. Das gilt auch für Zeiger.
Und danke
-
Skeptar schrieb:
Also nochmal die Frage. Wenn ich den Zeiger int *p; deklariere dann verweißt dieser auf keine Speicherzelle?
Erst wenn ichp = new int;
oder
p = &i
schreiben würde?
ja, er zeigt einfach irgendwo hin. dann zu lesen / schreiben, ohne ihn auf ein objekt zeigen zu lassen, wäre ub.
-
asfdlol schrieb:
Skeptar schrieb:
Also nochmal die Frage. Wenn ich den Zeiger int *p; deklariere dann verweißt dieser auf keine Speicherzelle?
Erst wenn ichp = new int;
oder
p = &i
schreiben würde?
ja, er zeigt einfach irgendwo hin. dann zu lesen / schreiben, ohne ihn auf ein objekt zeigen zu lassen, wäre ub.
Okay super danke!
Dann gibts bald die nächste Frage