go / beginner
Snippet
Pointers: Speicheradressen verstehen
Pointers speichern die Speicheradresse eines Wertes anstelle des Wertes selbst. Das Sternchen (*) deklariert einen Pointer-Typ, und das Et-Zeichen (&) erhält die Adresse einer Variable. Um auf den Wert an der Adresse zuzugreifen, dereferenzierst du den Pointer mit *. Pointers ermöglichen Pass-by-Reference-Semantik, sodass Funktionen die ursprüngliche Variable modifizieren können. Dies ist entscheidend für effizientes Arbeiten mit großen Datenstrukturen.
snippet.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package mainimport "fmt"func main() {x := 42var p *int = &xfmt.Println("Value of x:", x)fmt.Println("Address of x:", p)fmt.Println("Value at address:", *p)*p = 100fmt.Println("New value of x:", x)y := 50modifyValue(y)fmt.Println("y after pass by value:", y)modifyPointer(&y)fmt.Println("y after pass by pointer:", y)}func modifyValue(val int) {val = 999}func modifyPointer(val *int) {*val = 999}
Erklärung
1
var p *int = &x
p speichert die Adresse von x (Typ: Pointer auf int)
2
*p
Dereferenziert p um den Wert an dieser Adresse zu erhalten (42)
3
*p = 100
Ändert den Wert an der Adresse, auf die p zeigt, x wird 100
4
modifyValue(y)
Übergibt Kopie von y, Original bleibt unverändert
5
modifyPointer(&y)
Übergibt Adresse von y, Funktion kann Original modifizieren