Ich würde gerne wissen, ob ein Zeiger die Adresse einer Variablen speichert ... und woher bekommen wir den Zeiger?
Was ich gefragt habe, war, dass, wenn wir den Zeiger direkt verwenden, es einen Ort geben muss, von dem wir diesen Zeiger bekommen?
Bitte helfen Sie, ich bin verwirrt ...: ((
Ja, ein deklarierter Zeiger hat seine eigene Position im Speicher.
Im obigen Beispiel haben Sie eine Variable, 'b', die den Wert "17" speichert.
%Vor%Wenn Sie einen -Zeiger für diese Variable erstellen , wird der Zeiger an seinem eigenen Speicherort gespeichert .
%Vor%Es ist die Aufgabe des Compilers, zu wissen, wo er den Zeiger bekommen soll. Wenn sich Ihr Quellcode auf den Zeiger 'a' bezieht, übersetzt der Compiler ihn in - & gt; "welcher Adresswert auch immer an Speicherplatz 874 gespeichert ist."
Hinweis: Dieses Diagramm ist technisch nicht korrekt, da in 32-Bit-Systemen sowohl Zeiger als auch Int-Werte jeweils vier Byte verwenden.
Sehen Sie sich diesen SO-Beitrag an, um Zeiger besser zu verstehen. Was sind die Barrieren? um Zeiger zu verstehen und was kann getan werden, um sie zu überwinden?
Was Ihre Frage angeht, wenn ich verstehe, was Sie wollen, dann geben Sie beim Deklarieren eines Zeigers grundsätzlich eine Adresse oder einen numerischen Index an, der jeder Speichereinheit im System zugewiesen wird (normalerweise ein Byte) oder ein Wort). Das System stellt dann eine Operation bereit, um den Wert abzurufen, der im Speicher an dieser Adresse gespeichert ist.
In C:
%Vor% p
speichert dann die Adresse, in der 'H' gespeichert ist. p
ist eine Variable. Sie können einen Zeiger darauf nehmen:
pp
speichert jetzt die Adresse von p
. Wenn Sie die Adresse von pp
erhalten möchten, wäre das &pp
etc etc.
Der Compiler beschäftigt sich mit der Übersetzung der Variablen in unserem Code in Speicherstellen, die in Maschinenbefehlen verwendet werden. Die Position einer Zeigervariablen hängt davon ab, wo sie im Code deklariert ist, aber Programmierer müssen sich normalerweise nicht direkt damit befassen.
Eine Variable, die innerhalb einer Funktion deklariert ist, lebt auf dem Stapel oder in einem Register (sofern sie nicht als statisch deklariert ist).
Eine auf der obersten Ebene deklarierte Variable lebt in einem Speicherbereich am Anfang des Programms.
Eine Variable, die als Teil einer dynamisch zugewiesenen Struktur oder eines Arrays deklariert ist, befindet sich auf dem Heap.
Das "& amp;" Der Operator gibt den Speicherort der Variablen zurück, kann aber im Gegensatz zum Operator "*" nicht wiederholt werden.
Zum Beispiel erhält * * * den Wert an der Adresse * * i, was der Wert an der Adresse * i ist, der der in i gespeicherte Wert ist, und der Compiler findet heraus, wie er zu finden ist.
Aber & amp; & ich werde nicht kompilieren. & amp; i ist eine Zahl, die der Speicherplatz ist, den der Compiler für die Variable i verwendet. Diese Nummer wird nirgendwo gespeichert, also macht & amp; i keinen Sinn.
(Beachten Sie, dass, wenn & amp; i im Quellcode verwendet wird, der Compiler i nicht in einem Register speichern kann.)