Beeinflusst das Übergeben einer Kopie an eine Funktion ohne Zeiger das ursprüngliche Array?
sobes.tech KI
Antwort von AI
In Go ist ein Slice eine Struktur, die einen Zeiger auf ein Array, eine Länge und eine Kapazität enthält. Wenn Sie ein Slice ohne Zeiger an eine Funktion übergeben, wird die Slice-Struktur selbst kopiert, aber das zugrunde liegende Array nicht.
Das bedeutet, dass Änderungen an den Elementen des Slices innerhalb der Funktion das ursprüngliche Array beeinflussen, da beide Slices auf dasselbe Array zeigen. Wenn Sie jedoch das Slice selbst ändern (z.B. indem Sie ihm ein neues Slice zuweisen oder seine Länge ändern), wirken sich diese Änderungen nicht auf das Slice außerhalb der Funktion aus.
Beispiel:
func modifySlice(s []int) {
s[0] = 100 // ändert das ursprüngliche Array
s = append(s, 200) // ändert das lokale Slice, beeinflusst das externe nicht
}
func main() {
arr := []int{1, 2, 3}
modifySlice(arr)
fmt.Println(arr) // Gibt [100 2 3] aus
}
Kurz gesagt: Das Übergeben eines Slices ohne Zeiger erlaubt es, die Elemente des ursprünglichen Arrays zu ändern, aber nicht, das Slice selbst (seine Länge, Zeiger) außerhalb der Funktion zu ändern.