capypad
0 Tage Serie
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
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 main
 
import "fmt"
 
func main() {
x := 42
var p *int = &x
 
fmt.Println("Value of x:", x)
fmt.Println("Address of x:", p)
fmt.Println("Value at address:", *p)
 
*p = 100
fmt.Println("New value of x:", x)
 
y := 50
modifyValue(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