Назад к вопросам
Junior
24
// Что выведет следующий код и почему? 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) }
Компании, где спрашивали
СБК ПАРУС
Ответ от нейросети
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