Исходя из Python, я в настоящее время изучаю Go и пытаюсь обернуть голову вокруг указателей.
Я написал этот код, чтобы понять концепцию:
a := 1
b := &a
fmt.Println(b) // Shows the memory address of a
fmt.Println(*b) // Shows the value 1
*b++
fmt.Println(a) // Shows the value 2 (as expected)
Я попытался поиграться с этим кодом, чтобы улучшить мое понимание. Следующее, однако, не работает:
a := 1
b := &a
fmt.Println(b) // Shows the memory address of a
fmt.Println(*b) // Shows the value 1
b = *b + 1 // Compile error: invalid operation: b * +1 (mismatched types *int and int)
fmt.Println(a)
Очевидно, *b
имеет тип *int
, а значение 1
(очевидно) имеет тип int
. Однако почему можно увеличить значение a на *b++
в первом примере?