Назад к задачам
Junior — Senior
6

Отложенный вызов defer: различия между передачей значений и указателей

Получайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Условие задачи

Необходимо понять, какие данные будет выводить программа, если использовать оператор defer для функций, которые принимают как обычные значения, так и указатели.

func main() {
    fmt.Println(test1())
    test3()
}

func test3() {
    var a int = 10
    var b = 20
    var ptr *int = &b

    defer printInt("a", a)
    defer printInt("ptr as value", *ptr)
    defer printIntPointer("ptr as pointer", ptr)

    a = 1010
    *ptr = 2020
}

func changeI(i *int) {
    *i = 10
}

func printInt(label string, v int) {
    fmt.Printf("%s=%d\n", label, v)
}

func printIntPointer(label string, p *int) {
    fmt.Printf("%s=%d\n", label, *p)
}