Тема:Указатель в Голанг.Вопрос: Изменение значения

В данный момент читаю в книге про тему Указатель. У меня возник вопрос по работе указателя.

Вот сам кусочек кода в книге

package main

import "fmt"

func main() {
first := 100
second := &first

first++
*second++

var myNewPointer *int
myNewPointer = second

*myNewPointer++

fmt.Println("First:", first)
fmt.Println("Second:", *second)
}

В книге вывод :

First: 103
Second: 103

Вопрос: В каком моменте стало 103?

В данынй момент я понимаю так:

first и second = 100
После кусочка

first++
*second++

Они стали равны 101

Потом как понял myNewPointer получает в значения адрес ячейки памяти переменной second

var myNewPointer *int
myNewPointer = second 

например скажем 0х000010088

И как дальше

*myNewPointer++

Повлияло на то что бы результат стал 103


Ответы (1 шт):

Автор решения: Senior Pomidor
first := 100 // создали обычную переменную first
second := &first // создали указатель на переменную first
// теперь second указывает на значение first


first++ // увеличили значение first на 1 (101)
*second++ // увеличили значение first на 1 (102), потому что second указывает на first, а не является самосостоятельной переменной

var myNewPointer *int // создали указатель на int
myNewPointer = second // присвоили указатель на second, теперь myNewPointer указывает на значение first

*myNewPointer++ // увеличили значение first на 1 (103), потому что myNewPointer указывает на first, а не является самосостоятельной переменной

fmt.Println("First:", first)
fmt.Println("Second:", *second)
→ Ссылка