Indirektionsoperator

Definition - Was bedeutet Indirektionsoperator?

Ein Indirektionsoperator ist im Kontext von C # ein Operator, mit dem der Wert einer Variablen ermittelt wird, auf die ein Zeiger zeigt. Während ein Zeiger, der auf eine Variable zeigt, einen indirekten Zugriff auf den Wert der in ihrer Speicheradresse gespeicherten Variablen bietet, dereferenziert der Indirektionsoperator den Zeiger und gibt den Wert der Variablen an diesem Speicherort zurück. Der Indirektionsoperator ist ein unärer Operator, der durch das Symbol (*) dargestellt wird.

Der Indirektionsoperator kann in einem Zeiger auf einen Zeiger auf eine Ganzzahl, einem eindimensionalen Array von Zeigern auf Ganzzahlen, einem Zeiger auf ein Zeichen und einem Zeiger auf einen unbekannten Typ verwendet werden.

Der Indirektionsoperator wird auch als Dereferenzierungsoperator bezeichnet.

Technische.me erklärt den Indirektionsoperator

Das Symbol (*) wird zum Deklarieren von Zeigertypen und zum Durchführen der Zeiger-Indirektion verwendet, während der Operator 'address-of' () die Adresse einer Variablen zurückgibt. Daher sind der Indirektionsoperator und der Adressoperator invers zueinander.

Mit C # können Zeiger nur in einer unsicheren Region verwendet werden. Dies bedeutet, dass die Sicherheit des Codes in dieser Region nicht durch die Common Language Runtime (CLR) überprüft wird. In der unsicheren Region darf der Indirektionsoperator einen Zeiger lesen und darauf schreiben. Die folgenden C # -Anweisungen veranschaulichen die Verwendung des Indirektionsoperators:

  • int a = 1, b; // Linie 1
  • int * pInt = & a; // Zeile 2
  • b = * pInt; // Zeile 3

In der ersten Zeile oben sind a und b ganzzahlige Variablen, und a wird der Wert 1 zugewiesen. In Zeile 2 wird die Adresse von a im ganzzahligen Zeiger pInt (Zeile 2) gespeichert. Der Dereferenzierungsoperator wird in Zeile 3 verwendet, um den Wert an der Adresse, auf die pInt zeigt, der ganzzahligen Variablen b zuzuweisen.

Der Indirektionsoperator sollte verwendet werden, um einen gültigen Zeiger mit einer Adresse zu dereferenzieren, die an dem Typ ausgerichtet ist, auf den er zeigt, um undefiniertes Verhalten zur Laufzeit zu vermeiden. Es sollte nicht auf einen ungültigen Zeiger oder auf einen Ausdruck angewendet werden, der nicht vom Zeigertyp ist, um Compilerfehler zu vermeiden. Nach dem Umsetzen eines ungültigen Zeigers auf den rechten Zeigertyp kann jedoch der Indirektionsoperator verwendet werden.

Wenn Sie mehrere Zeiger in einer einzelnen Anweisung deklarieren, sollte der Indirektionsoperator nur einmal mit dem zugrunde liegenden Typ geschrieben und nicht für jeden Zeigernamen wiederholt werden. Der Indirektionsoperator ist im Gegensatz zu C und C ++ in C # verteilend. Wenn der Indirektionsoperator auf einen Nullzeiger angewendet wird, führt dies zu einem implementierungsdefinierten Verhalten. Da dieser Operator in einem unsicheren Kontext verwendet wird, sollte das Schlüsselwort unsafe zusammen mit der Option / unsafe während der Kompilierung davor verwendet werden. Diese Definition wurde im Kontext von C # geschrieben