Sobes.tech
Junior — Middle

İşarəçisiz nüsxəni funksiyaya ötürmək orijinal massivə təsir edərmi?

sobes.tech Süni İntellekt

AI-dan cavab

Go-da, dilim (slice) array-ə işarə edən, uzunluğu və tutumu olan bir quruluşdur. Bir funksiyaya göstəricisiz dilim verdikdə, dilimin özü kopyalanır, lakin əsas array kopyalanmır.

Bu, funksiyada dilimin elementlərində edilən dəyişikliklərin orijinal array-ə təsir edəcəyi deməkdir, çünki hər iki dilim eyni array-ə işarə edir. Ancaq, funksiyada dilimi (məsələn, yeni bir dilim təyin etməklə və ya uzunluğu ilə dəyişiklik etməklə) dəyişdirsəniz, bu dəyişikliklər funksiyanın xaricindəki dilimi təsir etməz.

Nümunə:

func modifySlice(s []int) {
    s[0] = 100 // orijinal array-ı dəyişəcək
    s = append(s, 200) // yerli dilimi dəyişəcək, xarici təsir etməz
}

func main() {
    arr := []int{1, 2, 3}
    modifySlice(arr)
    fmt.Println(arr) // [100 2 3] çap edəcək
}

Xülasə: göstəricisiz dilim keçirmək, orijinal array elementlərinin dəyişdirilməsinə imkan verir, lakin dilimin özünü (uzunluq, göstərici) funksiyanın xaricində dəyişdirməyə imkan vermir.