Was ist ein Zeiger?
In allen Sprachen ist ein Zeiger ein Variablentyp, in dem eine Speicheradresse gespeichert ist. Sie können ihn entweder bitten, Ihnen die Adresse mitzuteilen, auf die er zeigt, oder den Wert an der Adresse , auf die er zeigt.
Ein Zeiger kann als eine Art Lesezeichen betrachtet werden. Anstatt schnell zu einer Seite in einem Buch zu springen, wird ein Zeiger verwendet, um Speicherblöcke zu verfolgen oder zuzuordnen.
Stellen Sie sich den Speicher Ihres Programms genau wie ein großes Array von 65535 Bytes vor.
Zeiger zeigen gehorsam
Zeiger merken sich jeweils eine Speicheradresse und zeigen daher jeweils auf eine einzelne Adresse im Speicher.
Als Gruppe merken sich Zeiger Speicheradressen und rufen sie ab, wobei jeder Befehl ad nauseum befolgt wird.
Du bist ihr König.
Zeiger in C #
Insbesondere in C # ist ein Zeiger eine ganzzahlige Variable, die eine Speicheradresse zwischen 0 und 65534 speichert.
Zeiger sind ebenfalls spezifisch für C # und vom Typ int und daher signiert.
Sie können jedoch keine negativ nummerierten Adressen verwenden und auch nicht auf eine Adresse über 65534 zugreifen. Bei jedem Versuch wird eine System.AccessViolationException ausgelöst.
Ein Zeiger namens MyPointer wird wie folgt deklariert:
int * MyPointer;
Ein Zeiger in C # ist ein int, aber die Speicheradressen in C # beginnen bei 0 und reichen bis zu 65534.
Spitze Dinge sollten mit besonderer Sorgfalt behandelt werden
Das Wort unsicher ist beabsichtigt , Sie zu erschrecken, und für einen sehr guten Grund: Pointers spitze Dinge sind, und spitze Dinge wie Schwerter, Äxte, Zeiger usw. sollte mit besonderer Sorgfalt behandelt werden.
Zeiger geben dem Programmierer eine strenge Kontrolle über ein System. Daher haben Fehler wahrscheinlich schwerwiegendere Konsequenzen.
Um Zeiger verwenden zu können, muss unsicherer Code in den Eigenschaften Ihres Programms aktiviert sein, und Zeiger müssen ausschließlich in Methoden oder Blöcken verwendet werden, die als unsicher markiert sind.
Beispiel eines unsicheren Blocks
unsafe
{
// Place code carefully and responsibly here.
}
Verwendung von Zeigern
Wenn Variablen oder Objekte deklariert oder instanziiert werden, werden sie im Speicher gespeichert.
- Deklarieren Sie einen Zeiger mit dem Symbolpräfix *.
int *MyPointer;
- Um die Adresse einer Variablen abzurufen, verwenden Sie das Präfix & symbol.
MyPointer = &MyVariable;
Sobald einem Zeiger eine Adresse zugewiesen wurde, gilt Folgendes:
- Ohne * Präfix, um auf die Speicheradresse zu verweisen, auf die als int verwiesen wird.
MyPointer = &MyVariable; // Set MyPointer to point at MyVariable
- Mit dem Präfix *, um den Wert zu erhalten, der an der Speicheradresse gespeichert ist, auf die verwiesen wird.
"MyPointer is pointing at " + *MyPointer;
Da ein Zeiger eine Variable ist, die eine Speicheradresse enthält, kann diese Speicheradresse in einer Zeigervariablen gespeichert werden.
Beispiel für den sorgfältigen und verantwortungsvollen Umgang mit Zeigern
public unsafe void PointerTest()
{
int x = 100; // Create a variable named x
int *MyPointer = &x; // Store the address of variable named x into the pointer named MyPointer
textBox1.Text = ((int)MyPointer).ToString(); // Displays the memory address stored in pointer named MyPointer
textBox2.Text = (*MyPointer).ToString(); // Displays the value of the variable named x via the pointer named MyPointer.
}
Beachten Sie, dass der Typ des Zeigers ein int ist. Dies liegt daran, dass C # Speicheradressen als Ganzzahlen (int) interpretiert.
Warum ist es int statt uint?
Es gibt keinen guten Grund.
Warum Zeiger verwenden?
Zeiger machen viel Spaß. Da so viel Computer vom Speicher gesteuert wird, ermöglichen Zeiger einem Programmierer eine bessere Kontrolle über den Speicher seines Programms.
Speicherüberwachung.
Verwenden Sie Zeiger, um Speicherblöcke zu lesen und zu überwachen, wie sich die Werte, auf die gezeigt wird, im Laufe der Zeit ändern.
Ändern Sie diese Werte verantwortungsbewusst und verfolgen Sie, wie sich Ihre Änderungen auf Ihren Computer auswirken.