Sobes.tech
Junior — Middle

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.