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.