Frage

Ich weiß, dass Zeiger die Adresse des Wertes speichern, dass sie zeigen auf, aber wenn Sie den Wert eines direkt mit dem Bildschirmzeiger anzuzeigen, erhalten Sie eine Hexadezimalzahl. Wenn die Zahl genau das, was der Zeiger speichert, dann, wenn ich sage

pA = pB; //both are pointers

Sie kopieren die Adresse. Dann gäbe es nicht einen größeren Overhead mit Zeigern, wenn sie mit sehr kleinen Gegenständen wie ints und bools arbeiten?

War es hilfreich?

Lösung

Ein Zeiger ist im Wesentlichen nur eine Zahl. Er speichert die Adresse im RAM, wo die Daten. Der Zeiger selbst ist ziemlich klein (wahrscheinlich die gleiche Größe wie ein int auf 32-Bit-Architekturen, long auf 64-Bit).

Sie sind richtig, aber, dass ein int * würde jeden Raum nicht retten, wenn sie mit ints arbeiten. Aber das ist nicht der Punkt (kein Wortspiel beabsichtigt). Zeiger sind dort so können Sie Referenzen , um die Dinge, nicht nur verwenden, um die Dinge selbst.

Andere Tipps

Speicheradressen.

Das ist die Stellen im Speicher, wo andere Sachen ist .

Pointers sind in der Regel die Wortgröße des Prozessors, so dass sie im Allgemeinen um in einem einzigen Befehlszyklus bewegt werden. Kurz gesagt, sie sind schnell.

Wie bereits gesagt wird, speichert ein Zeiger auf eine Speicheradresse, die „nur eine Nummer‘, aber das ist eine Abstraktion. Auf Prozessorarchitektur Je kann es mehr als eine Nummer sein, beispielsweise eine Basis und Offset, der hinzugefügt werden muss, um In diesem Fall der Zeiger dereferenzieren. ist der Aufwand etwas höher, als wenn die Adresse eine einzelne Zahl.

Ja, es gibt Overhead in einem int oder einen Bool über einen Zeiger gegen die direkten Zugriff, in dem der Prozessor die Variable in einem Register setzen kann. Zeiger werden in der Regel eingesetzt, wenn der Wert der Indirektion aufwiegt jeden Overhead, das heißt ein Feld durchquert.

Ich habe zu Zeitaufwand bezogen haben. Nicht sicher, ob OP mehr Sorgen Raum oder Zeitaufwand war.

Die Zahl bezieht sich auf seine Adresse im Speicher. Die Größe eines Zeiger ist in der Regel die native Größe der Architektur des Computers, so dass kein zusätzlicher Aufwand ist im Vergleich zu anderem primitiven Typ.

Auf einigen Architekturen gibt es einen zusätzlichen Aufwand von Zeigern auf Zeichen, weil die Architektur nur Adressierung Worte unterstützt (32- oder 64-Bit-Werte). Ein Zeiger auf ein Zeichen wird daher als eine Wortadresse gespeichert, und ein Zeichen innerhalb des Wortes versetzt. De-Referenzierung des Zeigers beinhaltet das Wort zu holen und dann Verschieben und Maskieren es Wert ist, den Charakter zu extrahieren.

Eine Adresse im Speicher. Punkte irgendwo! : -)

Lassen Sie mich von den Grundlagen beginnen. Zunächst einmal müssen Sie wissen, welche variabel sind und wie sie verwendet werden.

Variablen sind grundsätzlich Speicherstellen (in der Regel einige Werte enthält), und wir verwenden eine Kennung (dh Variablennamen) an dieser Speicherstelle zu bezeichnen, und dem Wert, der an dieser Stelle verwendet werden.

Für sie besser zu verstehen, nehmen wir die Informationen aus den Speicherzellen, die an irgendeiner Stelle in Bezug auf die aktuellen Variable wollen. Können wir die Kennung zu extrahieren Informationen aus den umliegenden Zellen verwenden? Nein, weil die Kennung (Variablenname) nur den Wert geben, in dieser bestimmten Zelle enthalten ist.

Wenn aber irgendwie können wir die Speicheradresse erhalten, an dem diese Variable vorhanden ist, dann können wir leicht zu nahe gelegenen Orten bewegen und ihre Informationen nutzen, als auch (zur Laufzeit).

Dies ist, wo Zeiger ins Spiel kommen. Sie werden verwendet, um die Lage dieser Variablen zu speichern, so dass wir die zusätzliche Adressinformationen bei Bedarf nutzen können.

. Syntax: , um die Adresse einer Variablen speichern wir einfach nutzen können & (Adress-of) Operator

foo = &bar 

foo Hier speichert die Adresse der Variablen bar.

Nun, was ist, wenn wir den Wert, die an dieser Adresse wissen?

Für das, können wir einfach nutzen die * (Dereference) Operator .

value = *foo

Nun, da wir die Adresse einer Variablen speichern haben, werden wir den Speicher die gleiche Art und Weise sein, um, wie wir bei einer Variablen benötigen. Dies bedeutet, Zeiger sind ebenfalls in dem Speicher die gleiche Weise wie andere Variablen gespeichert, so wie für alle Fälle von Variablen, können wir auch die Adresse eines Zeigers speichern in einem weiteren Zeiger.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top