Sobes.tech
Senior

func updateV1(px *int) { x2 := 20 px = &x2 } func updateV2(px *int) { *px = 20 } func main() { x := 10 updateV1(&x) fmt.Println(x) updateV2(&x) fmt.Println(x) }

sobes.tech Süni İntellekt

AI-dan cavab

Bu kodda, int üçün göstəriciyə qəbul edən və fərqli işləyən iki funksiya var:

func updateV1(px *int) {
    x2 := 20
    px = &x2
}

func updateV2(px *int) {
    *px = 20
}

func main() {
    x := 10
    updateV1(&x)
    fmt.Println(x) // 10 çap edəcək
    updateV2(&x)
    fmt.Println(x) // 20 çap edəcək
}

İzah:

  • updateV1də, parametr px lokal nüsxədir. px = &x2 təyin etməsi yalnız bu lokal nüsxəni dəyişir, maindəki x-ə təsir etmir.
  • updateV2də, göstəricini dereferensiya etmək *px = 20, yəni, px-in göstərdiyi ünvanın dəyəri dəyişir. Bu, maindəki x-in dəyərini dəyişir.

Nəticə: updateV1 orijinal dəyişəni dəyişmir, updateV2 isə dəyişir.

Bu, lokal nüsxə göstəricini dəyişdirmə və göstərilən ünvandakı dəyəri dəyişdirmə arasındakı fərqi göstərir.