Golang Zeigerverständnis

GolangGolangBeginner
Jetzt üben

This tutorial is from open-source community. Access the source code

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

Dieses Labor wird Ihr Verständnis von Zeigern in Golang testen. Zeiger werden verwendet, um Referenzen auf Werte und Datensätze in Ihrem Programm zu übergeben.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL go(("Golang")) -.-> go/DataTypesandStructuresGroup(["Data Types and Structures"]) go/DataTypesandStructuresGroup -.-> go/pointers("Pointers") subgraph Lab Skills go/pointers -.-> lab-15494{{"Golang Zeigerverständnis"}} end

Zeiger

Das Problem besteht darin, zu verstehen, wie Zeiger im Gegensatz zu Werten mit zwei Funktionen (zeroval und zeroptr) funktionieren. zeroval hat einen int-Parameter, sodass Argumente per Wert an sie übergeben werden. zeroval erhält eine Kopie von ival, die von der im aufrufenden Funktionsunterschiedlich ist. Im Gegensatz dazu hat zeroptr einen *int-Parameter, was bedeutet, dass es einen int-Zeiger annimmt. Der Code *iptr im Funktionskörper dereferenziert dann den Zeiger von seiner Speicheradresse auf den aktuellen Wert an dieser Adresse. Das Zuweisen eines Werts an einen dereferenzierten Zeiger ändert den Wert an der referenzierten Adresse.

  • Sie sollten ein grundlegendes Verständnis von Golang haben.
  • Sie sollten wissen, wie man in Golang Funktionen definiert und verwendet.
  • Sie sollten wissen, wie man in Golang Zeiger verwendet.
## `zeroval` ändert das `i` in `main` nicht, aber
## `zeroptr` tut es, weil es eine Referenz auf die
## Speicheradresse für diese Variable hat.
$ go run pointers.go
initial: 1
zeroval: 1
zeroptr: 0
pointer: 0x42131100

Hier ist der vollständige Code:

// Go unterstützt <em><a href="https://en.wikipedia.org/wiki/Pointer_(computer_programming)">Zeiger</a></em>,
// was es Ihnen ermöglicht, Referenzen auf Werte und Datensätze
// in Ihrem Programm zu übergeben.

package main

import "fmt"

// Wir werden zeigen, wie Zeiger im Gegensatz zu Werten mit
// 2 Funktionen funktionieren: `zeroval` und `zeroptr`. `zeroval` hat einen
// `int`-Parameter, sodass Argumente per Wert an sie übergeben werden.
// `zeroval` erhält eine Kopie von `ival`, die von der im aufrufenden
// Funktionsunterschiedlich ist.
func zeroval(ival int) {
	ival = 0
}

// Im Gegensatz dazu hat `zeroptr` einen `*int`-Parameter, was bedeutet,
// dass es einen `int`-Zeiger annimmt. Der Code `*iptr` im
// Funktionskörper dereferenziert dann den Zeiger von seiner
// Speicheradresse auf den aktuellen Wert an dieser Adresse.
// Das Zuweisen eines Werts an einen dereferenzierten Zeiger ändert den
// Wert an der referenzierten Adresse.
func zeroptr(iptr *int) {
	*iptr = 0
}

func main() {
	i := 1
	fmt.Println("initial:", i)

	zeroval(i)
	fmt.Println("zeroval:", i)

	// Die Syntax `&i` liefert die Speicheradresse von `i`,
	// d.h. einen Zeiger auf `i`.
	zeroptr(&i)
	fmt.Println("zeroptr:", i)

	// Zeiger können ebenfalls ausgegeben werden.
	fmt.Println("pointer:", &i)
}

Zusammenfassung

In diesem Labor haben Sie gelernt, wie Sie in Golang Zeiger verwenden. Sie haben auch den Unterschied zwischen der Übergabe von Werten und Zeigern an Funktionen gelernt.