Transmiterea unei copii către o funcție fără un pointer va afecta array-ul original?
sobes.tech AI
Răspuns de la AI
În Go, un slice este o structură care conține un pointer către un array, o lungime și o capacitate. Când treci un slice într-o funcție fără un pointer, se copiază structura slice-ului în sine, dar nu și array-ul subiacente.
Aceasta înseamnă că modificările elementelor slice-ului în interiorul funcției vor afecta array-ul original, deoarece ambele slice-uri indică același array. Cu toate acestea, dacă modifici propriul slice (de exemplu, atribuindu-i un nou slice sau schimbând lungimea), aceste modificări nu vor afecta slice-ul în afara funcției.
Exemplu:
func modifySlice(s []int) {
s[0] = 100 // va modifica array-ul original
s = append(s, 200) // va modifica slice-ul local, nu cel extern
}
func main() {
arr := []int{1, 2, 3}
modifySlice(arr)
fmt.Println(arr) // Va afișa [100 2 3]
}
Rezumat: transmiterea unui slice fără un pointer permite modificarea elementelor array-ului original, dar nu permite modificarea propriului slice (lungimea, pointerul) în afara funcției.