Eine Variable ist ein logisches Konstrukt, das zur Intention eines Algorithmus gehört, während ein Speicherort ein physikalisches Konstrukt ist, das den Betrieb eines Computers beschreibt. Im Allgemeinen wird zur Ausführung eines Programms eine (vom Compiler generierte) Zuordnung zwischen dem logischen Begriff einer Variablen und dem Speicher des Computers vorgenommen.
(Auch in der Assemblersprache haben wir eine Vorstellung von (logischen) Variablen, die Algorithmen und Absichten sowie (physischen) Speicherorten entsprechen, obwohl sie in der Assemblersprache stärker zusammengeführt sind.)
Eine Variable ist ein übergeordnetes Konzept. Eine Variable steht entweder für eine unbekannte (wie in Mathematik oder Programmieraufgabe) oder einen Platzhalter, der durch einen Wert ersetzt werden kann (wie in Programmierung: Parameter).
Ein Speicherort ist ein Konzept auf niedriger (er) Ebene. Ein Speicherort kann verwendet werden, um einen Wert zu speichern, manchmal um den Wert einer Variablen zu speichern. Ein CPU-Register ist jedoch eine andere Möglichkeit, den Wert einiger Variablen zu speichern. CPU-Register sind ebenfalls Speicherorte auf niedriger (er) Ebene, aber sie sind keine Speicherorte, da sie keine Adressen, sondern nur Namen haben.
In gewissem Sinne ist eine Variable ein Abstraktionsmechanismus, um die Absicht des Programms auszudrücken, wohingegen ein Speicherort eine physikalische Entität der Verarbeitungsumgebung ist, die das Speichern und Abrufen ermöglicht.
Frage 003: Stimmt es, dass ein Zeiger im Speicherort 0x23452 gespeichert ist? Warum?
Wir können nicht sicher sagen. Nur weil es dort einen Wert gibt, der als Adresse funktionieren würde, heißt das nicht, dass es sich um diese Adresse handelt, sondern stattdessen die ganze Zahl (Dezimalzahl) 144466. Wir können keine Annahmen über die Interpretation von Werten treffen, die nur darauf beruhen, wie sie numerisch erscheinen.
Frage 004: Stimmt es, dass ein Zeiger im Speicherort 0x23452 gespeichert ist? Warum?
Dies ist in der Tat eine seltsame Frage. Sie erwarten einige Annahmen, die auf den Feldern basieren. Beachten Sie jedoch, dass die Adressen für jedes Feld um 1 erhöht werden. In jedem modernen Computer würde dies bedeuten, dass jede Box eine Byte - Byte - Adressierbarkeit enthalten kann. Dies ist seit Jahrzehnten die Norm. Ein Byte besteht jedoch nur aus 8 Bits und kann zwischen 0 und 255 liegen (für Werte ohne Vorzeichen). Sie weisen jedoch einen viel größeren Wert auf, der in einer dieser Adressen gespeichert ist, und sind daher sehr verdächtig. (Dies könnte funktionieren, wenn dies eine wortadressierte Maschine wäre, aber das sagt es nicht, und heutzutage sind es nur wenige Maschinen, obwohl dies bei einigen Lehrmaschinen der Fall ist.)
Anhand der vier Karteikarten, die ich Ihnen allen gezeigt habe, würde ich Zeiger auf etwas andere Weise definieren:
Ein Zeiger ist ein Speicherort, dessen Wert die Speicheradresse eines anderen Speicherorts ist.
Während es Situationen gibt, in denen dieses Denken richtig ist, mischen Sie hier Metaphern. Der Begriff einer Variablen geht auf den Algorithmus und seine Absicht zurück - es muss nicht angenommen werden, dass alle Variablen Speicherplätze haben. Einige Variablen (insbesondere Arrays) haben Speicherplätze, da Speicherplätze die Adressierung unterstützen (während CPU-Register nur benannt und nicht indiziert werden können).
Zur Ausführung gibt es eine logische Zuordnung zwischen Variablen & Anweisungen und Prozessorspeicherplätzen & Prozessorbefehlssequenzen. Eine Variable, deren Wert sich nie ändert (z. B. eine Konstante), benötigt nicht unbedingt einen Speicherplatz, da der Wert nach Belieben reproduziert werden kann (z. B. nach Bedarf für vom Compiler generierte Codesequenzen).
a
,0x23453
.nil
usw. Zeug in ihnen sind die Werte. Das mag Ihnen offensichtlich erscheinen, aber ich würde nicht gerne entscheidende Antworten auf diese Fragen geben, ohne zu sehen, wie diese Felder definiert sind. Es gibt wirklich keine Möglichkeit herauszufinden, ob es sicha
bei dem zweiten Bild um ein Zeichen, eine Zeichenfolge (falls sie sich unterscheiden) oder den Namen einer Variablen handelt. Wenn es eine Zeichenfolge ist, istnil
es dann auch eine Zeichenfolge? Oder ein "Null" -Wert?