Sobes.tech
Junior — Middle

Est-ce que passer une copie à une fonction sans pointeur affectera le tableau d'origine?

sobes.tech IA

Réponse de l'IA

En Go, une tranche (slice) est une structure qui contient un pointeur vers un tableau, une longueur et une capacité. Lorsque vous passez une tranche à une fonction sans pointeur, la structure de la tranche elle-même est copiée, mais pas le tableau sous-jacent.

Cela signifie que les modifications des éléments de la tranche à l’intérieur de la fonction affecteront le tableau d’origine, car les deux tranches pointent vers le même tableau. Cependant, si vous modifiez la tranche elle-même (par exemple, en lui assignant une nouvelle tranche ou en changeant sa longueur), ces modifications n’affecteront pas la tranche en dehors de la fonction.

Exemple:

func modifySlice(s []int) {
    s[0] = 100 // modifiera le tableau d’origine
    s = append(s, 200) // modifiera la tranche locale, n’affecte pas l’extérieur
}

func main() {
    arr := []int{1, 2, 3}
    modifySlice(arr)
    fmt.Println(arr) // Affichera [100 2 3]
}

En résumé : passer une tranche sans pointeur permet de modifier les éléments du tableau d’origine, mais ne permet pas de modifier la tranche elle-même (sa longueur, son pointeur) en dehors de la fonction.