go / beginner
Snippet
Zeiger und Speicheradressen
Zeiger speichern Speicheradressen statt Werte. Der `&`-Operator gibt einen Zeiger auf eine Variable, während `*` einen Zeiger dereferenziert um auf den Wert zuzugreifen. In `double` erwartet der `*int`-Parameter einen Zeiger, was Mutation der Original-Variable ermöglicht. Der Nullwert eines Zeigers ist `nil`, und du solltest vor dem Dereferenzieren immer prüfen.
snippet.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package mainimport "fmt"func double(n *int) {*n = *n * 2}func main() {value := 21fmt.Printf("Before: %d\n", value)double(&value)fmt.Printf("After: %d\n", value)var ptr *int = &valuefmt.Printf("Address: %p, Value: %d\n", ptr, *ptr)if ptr != nil {fmt.Println("Pointer is not nil")}}
Erklärung
1
func double(n *int) {
Funktion nimmt einen Zeiger auf int entgegen
2
*n = *n * 2
Dereferenziert und modifiziert den Original-Wert
3
double(&value)
Übergibt Adresse von value mit dem &-Operator
4
var ptr *int = &value
Deklariert Zeigervariable explizit
5
if ptr != nil {
Prüfe immer ob Zeiger nicht nil ist vor der Nutzung