691 Stimmen

Was bedeutet "Dereferenzierung" eines Zeigers?

Bitte fügen Sie der Erklärung ein Beispiel bei.

0 Stimmen

Das kann Ihnen helfen: stackoverflow.com/questions/2795575/

26 Stimmen

33 Stimmen

int *p; würde einen Zeiger auf eine Ganzzahl definieren, und *p würde diesen Zeiger dereferenzieren, d. h. er würde die Daten, auf die p zeigt, tatsächlich abrufen.

3voto

stsp Punkte 133

Ich denke, dass alle vorherigen Antworten falsch sind, da sie besagen, dass Dereferenzierung den Zugriff auf den tatsächlichen Wert bedeutet. Wikipedia gibt stattdessen die richtige Definition an: https://en.wikipedia.org/wiki/Dereference_operator

Sie arbeitet mit einer Zeigervariablen und gibt einen l-Wert zurück, der dem Wert an der Zeigeradresse entspricht. Dies wird als "Dereferenzierung" des Zeigers bezeichnet.

Das heißt, wir können den Zeiger dereferenzieren, ohne jemals auf den Wert zuzugreifen, auf den er zeigt. Zum Beispiel:

char *p = NULL;
*p;

Wir haben den NULL-Zeiger dereferenziert, ohne auf seine Wert. Oder wir könnten es tun:

p1 = &(*p);
sz = sizeof(*p);

Wiederum Dereferenzierung, aber kein Zugriff auf den Wert. Ein solcher Code wird NICHT abstürzen: Der Absturz erfolgt, wenn Sie tatsächlich Zugang die Daten durch eine ungültigen Zeiger. Leider ist jedoch nach dem Standard ist die Dereferenzierung eines ungültigen Zeigers ein undefiniertes Verhalten (mit ein paar Ausnahmen), auch wenn Sie nicht versuchen die eigentlichen Daten zu berühren.

Kurz gesagt: Die Dereferenzierung des Zeigers bedeutet die Anwendung des Dereferenzierungsoperator auf ihn anzuwenden. Dieser Operator gibt einfach einen l-Wert für Ihre zukünftige Verwendung zurück.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X