Heim > Backend-Entwicklung > Golang > Wie funktioniert die Zeiger-Dereferenzierung in Go und wie ist sie im Vergleich zu C/C?

Wie funktioniert die Zeiger-Dereferenzierung in Go und wie ist sie im Vergleich zu C/C?

Linda Hamilton
Freigeben: 2024-12-10 07:01:13
Original
184 Leute haben es durchsucht

How Does Pointer Dereferencing Work in Go, and How Does It Compare to C/C  ?

Zeigerdereferenzierung in Go verstehen

Zeigerdereferenzierung, eine grundlegende Operation in Go, beinhaltet den Zugriff auf den Wert, auf den eine Zeigervariable zeigt. In dem in der Frage erwähnten Beispiel werden Zeiger verwendet, um eine benutzerdefinierte Struktur, Vertex, zu manipulieren.

Zeiger und Strukturen

Das ursprüngliche Beispiel zeigte die Erstellung von Vertex-Instanzen, einschließlich eines Verweises auf eine Vertex-Instanz mithilfe eines Zeigers. Im modifizierten Beispiel geschieht Folgendes:

t := *q
q.X = 4
Nach dem Login kopieren

Die erste Zeile dereferenziert den Zeiger q und weist t seinen zugrunde liegenden Wert zu, wodurch effektiv eine Kopie des Scheitelpunkts erstellt wird, auf den gezeigt wird. Anschließend aktualisiert die Änderung von q.X die ursprüngliche Vertex-Instanz, hat jedoch keine Auswirkungen auf t, da t eine separate Kopie der Struktur enthält.

Überraschungen mit Zeigern vermeiden

Um sicherzustellen, dass sich Änderungen ergeben Durch einen Zeiger erstellte Referenzen werden in anderen Referenzen widergespiegelt. Zeiger sollten konsistent verwendet werden. Im überarbeiteten Beispiel unten zeigen sowohl t als auch q auf denselben zugrunde liegenden Vertex:

t := q
Nach dem Login kopieren

Mit dieser Änderung aktualisiert q.X = 4 nun die Vertex-Instanz, auf die sowohl t als auch q zugreifen, was zur erwarteten Ausgabe führt :

{1 2} &{4 2} {1 0} {0 0} &{4 2} {4 2} true
Nach dem Login kopieren

Eine Parallele in C/C

Im Gegensatz zum Als „extrem seltsames Verhalten“ wird C/C wahrgenommen und zeigt ein ähnliches Verhalten, wenn Zeiger involviert sind. Der folgende C-Code demonstriert dies:

Vertex v = Vertex{1, 2};
Vertex* q = &v;
Vertex t = *q;
q->x = 4;
std::cout << "*q: " << *q << "\n";
std::cout << " t: " << t << "\n";
Nach dem Login kopieren

Die Ausgabe ist analog zum modifizierten Go-Beispiel:

*q: { 4, 2 }
t: { 1, 2 }
Nach dem Login kopieren

Daher stimmt das in Go beobachtete Zeiger-Dereferenzierungsverhalten mit dem Verhalten von Zeigern überein in anderen Programmiersprachen wie C/C .

Das obige ist der detaillierte Inhalt vonWie funktioniert die Zeiger-Dereferenzierung in Go und wie ist sie im Vergleich zu C/C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage