Использование указателей в функциях
Часть раздела Основы путешествия по GO на Coddy — урок 64 из 109.
Функции могут принимать и изменять переменные через указатели. Это позволяет функциям изменять исходное значение, а не просто копию.
Создайте функцию, которая изменяет значение через указатель:
func main() {
number := 10
fmt.Println("Before:", number)
// Pass the address of number
doubleValue(&number)
fmt.Println("After:", number)
}
func doubleValue(num *int) {
// Modify the value at the pointer's address
*num = *num * 2
}Вывод показывает значение, измененное функцией:
Before: 10
After: 20Когда мы передаем &number, функция получает указатель и может изменять исходную переменную.
Задание
НовичокВ этом испытании вы попрактикуетесь в использовании указателей в функциях. Вам нужно завершить функцию, которая принимает указатель на строку и изменяет значение строки, переводя её в верхний регистр.
Функция makeUppercase уже определена для вас. Ваша задача — изменить строку, на которую указывает указатель, используя функцию strings.ToUpper().
Шпаргалка
Функции могут изменять переменные через указатели, получая адрес памяти вместо копии:
func main() {
number := 10
// Передаем адрес переменной number, используя &
doubleValue(&number)
fmt.Println(number) // Output: 20
}
func doubleValue(num *int) {
// Изменяем значение по адресу указателя, используя *
*num = *num * 2
}Ключевой синтаксис указателей:
&variable— получает адрес переменной*pointer— разыменовывает указатель для доступа/изменения значения*type— объявляет тип параметра-указателя
Попробуйте сами
package main
import (
"fmt"
"strings"
)
// makeUppercase принимает указатель на строку и переводит строку в верхний регистр
func makeUppercase(strPtr *string) {
// TODO: Используйте strings.ToUpper(), чтобы изменить строку, на которую указывает strPtr
// Подсказка: вам нужно разыменовать указатель, чтобы получить доступ к значению строки
? = strings.ToUpper(?)
}
func main() {
// У нас уже есть строковая переменная
message := "hello, world"
// Выводим оригинальное сообщение
fmt.Printf("Original message: %s\n", message)
// Вызываем makeUppercase, передавая адрес message
makeUppercase(&message)
// Выводим измененное сообщение
fmt.Printf("Modified message: %s\n", message)
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
4Операторы сравнения и логические операторы
Операторы сравнения — Часть 1Операторы сравнения — Часть 2Логический оператор ANDЛогический оператор ORЛогический оператор NOTОсновы приоритета операторовИтоги: выполнение сравнений7Управляющие конструкции: Циклы
Что такое цикл `for`Цикл `for` — основыЦикл `for` — только условиеКлючевое слово `break`Ключевое слово `continue`Вложенные циклыИтоги — повторение действий2Переменные и базовые типы данных
Что такое переменнаяВывод типов с помощью `:=`Целые числа (int)Числа с плавающей точкойЛогический тип (Booleans)СтрокиНулевые значения (Zero Values)КонстантыПравила именованияИтоги: переменные и типы5Основы ввода-вывода
Форматированный выводСпецификаторы форматаВывод типовБазовый ввод данных пользователемИтоги: ввод и вывод8Функции
Понимание функцийОбъявление функцииВызов функцийПараметры функцииВозврат одного значенияВозврат нескольких значенийИменованные возвращаемые значенияОсновы области видимости функцийИтоги — создание переиспользуемого кода3Базовые операторы
Арифметические операторыОператор деленияОператор остатка от деленияОператор присваиванияКомбинированные операторы присваиванияИнкремент и декрементПовторение — Вычисления6Управление потоком: Условные конструкции
Оператор `if`Ключевое слово `else`Ключевое слово `else if`Затенение переменных в `if`Инициализация переменныхОператор `switch`Switch с выражениямиSwitch без выраженийКлючевое слово `fallthrough`Итоги — Принятие решений9Указатели
Что такое указатель?Объявление переменных-указателейОператор взятия адресаРазыменование указателейИспользование указателей в функцияхНулевые указателиИтоги: Понимание указателей