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 AI

Պատասխան AI-ից

Այս կոդում կան երկու ֆունկցիաներ, որոնք ընդունում են int-ի ցուցիչ, բայց աշխատում են տարբեր կերպ.

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

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

func main() {
    x := 10
    updateV1(&x)
    fmt.Println(x) // Տպում է 10
    updateV2(&x)
    fmt.Println(x) // Տպում է 20
}

Ներմուծում:

  • updateV1-ում, պարամետրը px տեղական պատճեն է ցուցչի։ px = &x2 նշանակումը փոխում է միայն այդ տեղական պատճենը, չի ազդում main-ի փոփոխականի վրա։
  • updateV2-ում, ցուցչի dereference-ով *px = 20, փոխվում է այն արժեքը, որը ցույց է տալիս px-ը։ Սա փոխում է mainx-ի արժեքը։

Արդյունք՝ updateV1-ը չի փոխում սկզբնական փոփոխականը, իսկ updateV2-ը փոխում է։

Այսը ցույց է տալիս տարբերությունը տեղական պատճենի փոփոխման և այն արժեքը փոփոխելու միջև, որը ցույց է տալիս ցուցիչը։