Bir kopyayı gösterici olmadan bir fonksiyona geçirmek, orijinal dizi üzerinde etkili olur mu?
sobes.tech yapay zeka
AI'dan gelen yanıt
Go dilinde, dilim (slice) bir diziye işaretçi, uzunluk ve kapasite içeren bir yapıdır. Bir dilimi işaretçi olmadan bir fonksiyona geçirirken, dilimin kendisi kopyalanır, ancak altta yatan dizi kopyalanmaz.
Bu, fonksiyon içindeki dilim öğelerinde yapılan değişikliklerin, her ikisi de aynı diziye işaret ettiğinden, orijinal diziyi etkileyeceği anlamına gelir. Ancak, fonksiyon içinde dilimi (örneğin, yeni bir dilim atayarak veya uzunluğunu değiştirerek) değiştirirseniz, bu değişiklikler fonksiyon dışındaki dilimi etkilemez.
Örnek:
func modifySlice(s []int) {
s[0] = 100 // orijinal diziyi değiştirecek
s = append(s, 200) // yerel dilimi değiştirecek, dışarıyı etkilemeyecek
}
func main() {
arr := []int{1, 2, 3}
modifySlice(arr)
fmt.Println(arr) // [100 2 3] yazdırır
}
Özetle: dilimi işaretçi olmadan geçirmek, orijinal dizinin öğelerini değiştirmeye izin verir, ancak dilimin kendisini (uzunluk, işaretçi) fonksiyon dışında değiştirmeye izin vermez.