Menu
Coddy logo textTech

Использование указателей в функциях

Часть раздела Основы путешествия по 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, функция получает указатель и может изменять исходную переменную.

challenge icon

Задание

Новичок

В этом испытании вы попрактикуетесь в использовании указателей в функциях. Вам нужно завершить функцию, которая принимает указатель на строку и изменяет значение строки, переводя её в верхний регистр.

Функция 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)
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы