G
asdrubael schrieb:
Soll das bewirken, das ich nicht direkt auf den Speicherbereich von weißnichwas zugreifen kann, sondern nur auf den Wert? Kann eigentlich nicht sein, weil oben steht ja das es trotzdem geht.
Wie du schon sagst, du kannst dank Indirektion trotzdem auf den Speicher zugreifen.
Wie ich bereits sagte, macht man sowas hauptsächlich in C um den Wert (Adresse) eines Zeigers zu ändern. Nehmen wir mal folgendes Beispiel
void GetMem(void* p)
{
p = foo;
}
//...
void* a = bar; // a enthaelt nun den Wert von bar
GetMem(a); // a enthaelt jetzt immer noch den Wert von bar
// warum? nun, auch Zeiger werden by-value uebergeben
// dh, dass GetMem eine lokale Kopie von a bekommt, der foo zugewiesen wird
// beim Beenden von GetMem wird diese lokale Kopie zerstoert, ohne dass dies den urspruenglichen Zeiger (a) beeinflusst
//...
und vergleichen das hiermit
void GetMem(void** p)
{
*p = foo;
}
//...
void* a = bar; // a enthaelt nun den Wert von bar
GetMem(&a); // a enthaelt jetzt den Wert von foo
// warum? nun, diesmal wird die Adresse von a by-value uebergeben
// per Indirektion (*p) bekomme ich somit Zugriff auf a (bzw auf den Speicher, der a entspricht)
//...
Schauen wir uns als letztes noch die C++ Version an
void GetMem(void*& p)
{
p = foo;
}
//...
void* a = bar; // a enthaelt nun den Wert von bar
GetMem(a); // a enthaelt jetzt den Wert von foo
// warum? nun, diesmal wird a by-reference uebergeben
// dh, ich greife auf den Parameter in GetMem (p) zu, als wenn es a selbst waere
//...
Ich hoffe, dass ich es nicht zu wirr erklärt hab und die ganze Sache jetzt etwas klarer wird.