Назад к вопросам
Junior
28
// Что выведет следующий код и почему? 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) // Bob changeName(person) fmt.Println(person.Name) // Bob }
Компании, где спрашивали
СБК ПАРУС
Ответ от нейросети
sobes.tech AI
Код выведет:
Bob
Alice
Объяснение:
- В
mainсоздаётся указательpersonна структуруPersonс именем "Bob". - При первом
fmt.Println(person.Name)выводится "Bob". - Функция
changeNameпринимает указатель наPersonи присваивает по этому указателю новую структуру с именем "Alice". - Это изменяет содержимое по адресу, на который указывает
person. - Поэтому после вызова
changeName(person)значениеperson.Nameстановится "Alice".
В вашем примере в комментариях указано, что второй вывод будет "Bob", но это неверно. Поскольку функция меняет значение по указателю, имя изменится на "Alice".