Sobes.tech
Назад к вопросам
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".