Все вопросы

12 Типы и значения

Что такое указатель и когда он нужен?

Указатель хранит адрес значения. *T — тип «указатель на T», &x берёт адрес, *p читает или меняет то, что по адресу. Функция с аргументом *int меняет переменную вызывающего. Арифметики указателей в языке нет.

Указатель нужен, когда значение должно измениться у вызывающего, когда nil означает «значения нет», или когда структура большая и её незачем копировать на каждый вызов. Маленькие структуры спокойно передают по значению.

Пример

Go

inc меняет x снаружи

package main

import "fmt"

func inc(n *int) {
    *n++
}

func main() {
    x := 1
    inc(&x)
    fmt.Println(x)
}