capypad
0 Tage Serie
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
go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package main
 
import "fmt"
 
func double(n *int) {
*n = *n * 2
}
 
func main() {
value := 21
fmt.Printf("Before: %d\n", value)
 
double(&value)
fmt.Printf("After: %d\n", value)
 
var ptr *int = &value
fmt.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