Zeiger Verständnis, Schaubild
-
Hi,
kann mir einer kurz sagen, ob ich den Zeigerbegriff richtig verstehe?
Folgendes Bild:
http://www.okunektion.de/zeiger.gif
1. Eine normale Variable speichert einen Wert unter einer Adresse
2. Ein Zeiger speichert als Wert eine Adresse, die ohne Bezeichner ist und deren Wert der tatsächliche Wert ist.
3. Die Bezeichner sind nur durch den Compiler zugewiesen, liegen also als Map zur Programmlaufzeit vor.Ist das soweit richtig?
Eine Referenz wäre dann ein Zeiger mit Schreibschutz, nicht wahr?
Danke,
Joe
-
Schau hier: http://tutorial.schornboeck.net/referenzen_zeiger.htm
oder hier: http://www.c-plusplus.net/forum/viewtopic-var-t-is-124532.html (Abschnitt 1 und 3.1)
-
KeineAhnungJoe schrieb:
1. Eine normale Variable speichert einen Wert unter einer Adresse
Ja. Aber etwas kompliziert erklaert.
Der Computer hat ja einen Speicher und dort liegen alle Werte und daten drinnen. Und um einen Wert wiederzufinden benutzt er dessen adresse. Die Variablen sind also nichts anderes als die adresse des wertes in fuer uns lesbarer form.
2. Ein Zeiger speichert als Wert eine Adresse, die ohne Bezeichner ist und deren Wert der tatsächliche Wert ist.
Jein. p_iBez koennte auch auf 003225D8 also iBez zeigen. Dann haette der tatsaechliche Wert sehr wohl eine 'bezeichnung'.
3. Die Bezeichner sind nur durch den Compiler zugewiesen, liegen also als Map zur Programmlaufzeit vor.
wenn du mit bezeichner variablen namen meinst, dann ist das nicht ganz korrekt. Denn wie gesagt: die variablennamen sind nichts anderes als die adresse des wertes den sie beinhalten - nur dass wir es lesen koennen.
wenn wir
int i;schreiben, dann reserviert der compiler irgendwo speicher fuer einen int und i ist jetzt das synonym dafuer. jedesmal wenn wir i=3; schreiben, dann sieht der compiler nicht i=3 sondern "setze 3 an die stelle 003225D8 (oder wo der speicher von i auch immer liegen mag).
Eine Referenz wäre dann ein Zeiger mit Schreibschutz, nicht wahr?
Eine Referenz waere dann ein Zeiger mit umbiegeschutz, das ist wahr!

Eine Referenz ist im Prinzip ein konstanter zeiger. Ein Zeiger kann ja umgebogen werden:
int a,b; int* p=&a; p=&b;eine referenz nicht.
wohl aber koennen wir den wert der referenziert wird aendern.
int i=3; int& r=i; r=4; cout<<i; //4
-
Soweit so klar.
Es gibt da aber noch was anderes:
IEntity* newBlock=static_cast<IEntity*>(::operator new(BLOCKSIZE * n));Sagen wir mal "n" bezeichnet die Größe des Typs, 12 Byte. Ich hätte gerne Platz für 2 Objekte (Blocksize=2), also 2*12 Byte, auf einem 32 Bit System.
wie sieht es dann genau aus?
Ich hab da mal was gekritzelt, stimmt das so?(zeiger.gif von oben überschrieben
)http://www.okunektion.de/zeiger.gif
Danke schonmal!
-
Wohl eher so:
http://www.okunektion.de/zeiger2.gif

Die Adressen selbst hab ich jetzt allerdings nicht korrekt hochgezählt.