«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему присвоение указателя в функциях Go иногда не влияет на исходное значение?

Почему присвоение указателя в функциях Go иногда не влияет на исходное значение?

Опубликовано 13 ноября 2024 г.
Просматривать:960

Why Does Pointer Assignment in Go Functions Sometimes Not Affect the Original Value?

Назначение указателя в функциях Go: почему разные результаты?

При передаче указателя на функцию в Go очень важно понимать, как используется указатель и какое влияние он оказывает на исходное значение. Это обсуждение вращается вокруг фрагмента кода, который передает указатель на структуру Test с намерением изменить ее поле Value.

Первый фрагмент кода, несмотря на попытку изменить поле Value путем присвоения указателю новой структуры Test. (*p = Test{4}), не может изменить фактическое значение. Это связано с тем, что он просто переназначает переменную-указатель p, а не указанное значение. Переменная p в функции f() существует независимо и не влияет на значение, на которое указывает переменная p в main().

Напротив, второй фрагмент кода, где p.Value явно установлено значение 4, успешно изменяет поле «Значение». Это связано с тем, что оператор разыменовывает указатель, обеспечивая доступ и изменение фактического указанного значения.

В качестве дополнительного примечания можно изменить адрес, хранящийся в переменной указателя функции main(), передав его адрес (*) в функцию f(). Однако этот подход менее эффективен и удобен по сравнению с прямым изменением указанного значения с помощью p.Value.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3