Menu
Coddy logo textTech

Объявление переменных-указателей

Часть раздела Основы путешествия по GO на Coddy — урок 61 из 109.

В Go вы можете объявлять указатели двумя основными способами: используя var с типом указателя или используя оператор взятия адреса с :=.

Объявите указатель, используя var с типом указателя:

func main() {
    var x int = 42
    var ptr *int    // Объявление указателя на целое число
    ptr = &x        // Присваивание адреса x переменной ptr
    
    fmt.Println("Value of x:", x)
    fmt.Println("Value of ptr:", ptr)
    fmt.Println("Value at ptr:", *ptr)
}

Вывод показывает, что указатель хранит адрес x:

Value of x: 42
Value of ptr: 0xc000018030
Value at ptr: 42

Вы также можете объявить и инициализировать указатель в одной строке, используя :=:

y := 100
ptr := &y    // Объявление и инициализация указателя за один шаг
challenge icon

Задание

Новичок

В этом испытании вы попрактикуетесь в объявлении и использовании указателей в Go. Указатель уже настроен для вас, и ваша задача — создать новый указатель, который указывает на то же значение.

Выполните TODO в коде, чтобы объявить новую переменную-указатель с именем 'secondPointer', которая указывает на тот же адрес памяти, что и существующий указатель.

Шпаргалка

В Go вы можете объявлять указатели, используя var с типом указателя или используя оператор взятия адреса с :=.

Объявление указателя с помощью var:

var x int = 42
var ptr *int    // Объявление указателя на целое число
ptr = &x        // Присваивание адреса x переменной ptr

Объявление и инициализация указателя в одну строку с помощью :=:

y := 100
ptr := &y    // Объявление и инициализация указателя за один шаг

Доступ к значениям указателя:

  • ptr — адрес памяти
  • *ptr — значение по этому адресу

Попробуйте сами

package main

import "fmt"

func main() {
	// Вот переменная и указатель на нее
	originalValue := 42
	pointerToValue := &originalValue
	
	// TODO: Объявите новую переменную-указатель с именем 'secondPointer' 
	// которая указывает на тот же адрес памяти, что и 'pointerToValue'
	
	
	// Не изменяйте код ниже
	fmt.Printf("Original value: %v\n", originalValue)
	fmt.Printf("Value through first pointer: %v\n", *pointerToValue)
	fmt.Printf("Value through second pointer: %v\n", *secondPointer)
	
	// Давайте изменим исходное значение и увидим, что все указатели отражают это изменение
	originalValue = 100
	fmt.Printf("\nAfter changing original value to 100:\n")
	fmt.Printf("Original value: %v\n", originalValue)
	fmt.Printf("Value through first pointer: %v\n", *pointerToValue)
	fmt.Printf("Value through second pointer: %v\n", *secondPointer)
}
quiz iconПроверьте себя

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

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