Sobes.tech
Back to questions
Junior
23

// Что выведет следующий код и почему? package main import "fmt" type Person struct { Name string } func changeName(person *Person) { person = &Person{ Name: "Alice", } } func main() { person := &Person{ Name: "Bob", } fmt.Println(person.Name) changeName(person) fmt.Println(person.Name) }

Companies where asked
СБК ПАРУС

Answer from AI

sobes.tech AI

Код выведет:

Bob
Bob

Объяснение:

В функции changeName параметр person — это локальная копия указателя на структуру Person. Когда внутри функции person переназначается на новый адрес &Person{Name: "Alice"}, это изменение касается только локальной копии указателя, а не оригинального указателя, переданного в main.

Таким образом, в main переменная person продолжает указывать на исходный объект с именем "Bob".

Чтобы изменить имя оригинального объекта, нужно изменить поле через указатель, например:

func changeName(person *Person) {
    person.Name = "Alice"
}

Тогда вывод будет:

Bob
Alice