Referenzierungs-/Dereferenzierungsoperatoren

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Unäre Operatoren - Index

Syntax

& cast-ausdruck
* cast-ausdruck

Bemerkungen

Die Operatoren & und * arbeiten zusammen, um Zeiger zu referenzieren bzw. zu dereferenzieren, die an Funktionen übergeben werden.

Referenzierungsoperator ( & )

Der Referenzierungsoperator wird verwendet, um die Adresse eines Zeigers an eine Funktion außerhalb von main() zu übergeben.

Der Operand (cast-Ausdruck) muss eins der folgenden sein:

  • ein Funktionsdesignator
  • ein L-Wert, der ein Objekt bezeichnet, das kein Bitfeld ist und nicht die Speicherklasse register hat.

Hat der Operand den Typ typ, so ist das Ergebnis ein Zeiger auf typ.

Einige Bezeichner, die keine L-Werte sind, wie Funktionsnamen und Array-Namen, werden automatisch konvertiert zu pointer-to-X-Typen, wenn sie in bestimmten Zusammenhängen auftreten. Der Operator & kann mit solchen Objekten gebraucht werden, aber dessen Gebrauch ist redundant und daher entmutigend.

Ein Beispiel:

   T t1 = 1, t2 = 2;
   T *ptr = &t1;      // Initialisierter Zeiger
   *ptr = t2;           // Gleicher Effekt wie t1 = t2

T *ptr = &t1 wird behandelt als

   T *ptr;
   ptr = &t1;

Also wird ptr oder *ptr zugewiesen. Sobald ptr initialisiert worden ist mir der Adresse &t1,, kann er sicher dereferenziert werden, damit sich der L-Wert *ptr ergibt.

Dereferenzierungsoperator ( * )

Der Dereferenzierungsoperator * kann in einem Variablenausdruck verwendet werden, um einen Zeiger zu erzeugen. Außerdem kann dieser Operator in external-Funktionen benutzt werden, um den Wert eines Zeigers, der per Referenz übergeben wurde, zu erhalten.

Ist der Operand vom Typ "Zeiger auf Funktion", so ist das Ergebnis ein Funktionsdesignator.

Ist der Operand ein Zeiger auf ein Objekt, so ist das Ergebnis ein L-Wert, der das Objekt bezeichnet.

Unter jeder der folgenden Bedingungen ist das Ergebnis der Dereferenzierung undefiniert:

  1. Der Cast-Ausdruck ist ein Nullzeiger.
  2. Der Cast-Ausdruck liefert die Adresse einer auto-Variablen und die Ausführung des betreffenden Blocks ist bereits beendet.

Anmerkung:  Mit & wird auch der Operator für das bitweise UND bezeichnet.

Anmerkung:  Das Zeichen * kann auch der Multiplikationsoperator sein.

Siehe auch