Freigeben über


Dereferenzierung und Adresse-Von Operators

Der Dereferenzierungsoperator (*) greift auf einen Wert über einen indirekten Zeiger an.Der Operand muss ein Zeigerwert sein.Das Ergebnis der Operation ist der Wert, der von den Operanden adressiert wird. Das heißt, der Wert in der Adresse, an die sein Operand zeigt.Der Typ des Ergebnisses entspricht dem dieser Typ die Operandenadressen.

Wenn der Operand auf eine Funktion verweist, ist das Ergebnis ein Funktionsbezeichner.Wenn es an einem Speicherort verweist, ist das Ergebnis ein l-Wert, der den Ort festlegt.

Wenn der Zeigerwert ungültig ist, ist das Ergebnis nicht definiert.In der folgenden Liste sind einige der häufigsten Bedingungen, die ein Zeigerwert ungültig.

  • Der Zeiger ist ein NULL-Zeiger.

  • Der Zeiger gibt die Adresse eines lokalen Elements an, das nicht zum Zeitpunkt ihres Verweises sichtbar ist.

  • Der Zeiger wird eine Adresse an, der unpassend für den Objekttyp ausgerichtet ist, das angezeigt wird.

  • Der Zeiger wird eine Adresse an, die nicht vom ausgeführten Programm verwendet wird.

Adressoperator (&) gibt die Adresse seines Operanden.Der Operand Adressoperator kann es sich entweder um einen Funktionsbezeichner oder ein L-Wert sein, der ein Objekt festgelegt wird, das nicht über ein Bitfeld ist und nicht mit dem Register Speicherklassenspezifizierer deklariert ist.

Das Ergebnis der Adressen Vorgangs ist ein Zeiger auf den Operanden.Der Typ, der vom Zeiger behoben wird, ist der Typ des Operanden.

Adressoperator kann auf Variablen mit Basis, Struktur- oder - Union-Typen erstellt, die auf der Dateigültigkeitsbereichs Anwendungsebene deklariert werden, oder zum Verweisen auf den indizierten Arrays nur angewendet werden.In diesen Ausdrücken kann ein konstanter Ausdruck, der nicht einschließt, Adressoperator hinzugefügt werden oder den Adressausdruck subtrahiert werden.

Beispiele

In den folgenden Beispielen werden diese Deklarationen:

int *pa, x;
int a[20];
double d;

Diese Anweisung verwendet den Adressoperator:

pa = &a[5];

Adressoperator (&) erhält die Adresse des 6. aElemente des Arrays.Das Ergebnis wird in der Zeigervariablen pagespeichert.

x = *pa;

Der Dereferenzierungsoperator (*) ist in diesem Beispiel verwendet, um den int-Wert an der Adresse zuzugreifen, die in pagespeichert wird.Der Wert wird der ganzzahlige Variable xzugewiesen.

if( x == *&x )
    printf( "True\n" );

In diesem Beispiel wird das Wort Trueund zeigt, dass das Ergebnis der Anwendung des Dereferenzierungsoperators auf die Adresse eines x dasselbe wie xist.

int roundup( void );     /* Function declaration */

int  *proundup  = roundup;
int  *pround  = &roundup;

Sobald roundup wird die Funktion deklariert, werden zwei Zeiger auf roundup deklariert und initialisiert.Der erste Zeiger, proundupwird, nur mithilfe des Namens der Funktion initialisiert, während der zweite pround, Adressoperator in der Initialisierung verwendet wird.Die Initialisierungen sind äquivalent.

Siehe auch

Referenz

Der Dereferenzierungsoperator: *

Adresse-Von Operator: &.