Sobes.tech
Junior — Middle

Hatással van-e az eredeti tömbre, ha másolatot adunk át egy függvénynek pointer nélkül?

sobes.tech MI

Válasz az MI-től

Go-ban a szelet (slice) egy olyan struktúra, amely egy mutatót tartalmaz egy tömbre, egy hosszúságot és egy kapacitást. Amikor szeletet adsz át egy függvénynek mutató nélkül, maga a szelet struktúrája másolódik, de a mögöttes tömb nem.

Ez azt jelenti, hogy a szelet elemeiben végzett módosítások hatással lesznek az eredeti tömbre, mivel mindkettő ugyanarra a tömbre mutat. Azonban, ha a függvényen belül módosítod a szeletet (például, új szeletet rendel hozzá vagy megváltoztatja a hosszát), ezek a módosítások nem befolyásolják a függvényen kívüli szeletet.

Példa:

func modifySlice(s []int) {
    s[0] = 100 // módosítja az eredeti tömböt
    s = append(s, 200) // módosítja a helyi szeletet, nem befolyásolja a külsőt
}

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

Összefoglalva: szelet mutató nélküli átadása lehetővé teszi az eredeti tömb elemeinek módosítását, de nem engedi a szelet (hossz, mutató) módosítását a függvényen kívül.