Какой результат выведет программа в консоль (пример 55)

В приведённом main переменная p не объявлена, поэтому программа не компилируется. После замены p=&v на p:=&v она выведет 3 и 3.

Короткий ответ

Что ответить на собеседовании

В приведённом main переменная p не объявлена, поэтому программа не компилируется. После замены p=&v на p:=&v она выведет 3 и 3.

Подробный разбор

Ответ с пояснениями

Условие

Определите, какой вывод появится на экране после выполнения следующего кода:

package main 
        
import "fmt"

func changePointer(p * int) {
    v := 3
    p = &v        
}

func main () {
    v := 3
    p = &v
    fmt.Println(*p)        

    changePointer(p)
    fmt.Println(*p)
}

Ответ

В приведённом main переменная p не объявлена, поэтому программа не компилируется. После замены p=&v на p:=&v она выведет 3 и 3.

changePointer получает копию указателя и переназначает только свою локальную p. Внешний указатель остаётся прежним. Совпадение значений 3 маскирует различие объектов; даже если внутри взять другое число, внешний вывод не изменится. Для изменения исходного числа нужна запись *p=..., для смены внешнего адреса — возврат указателя или **int.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее