Объяснение простого Go Pointer - PullRequest
0 голосов
/ 01 июня 2018

Я работаю через Go Ebook.

Здесь мы создаем массив указателей следующим образом:

sampleArray := [5]*int{0: new(int), 1: new(int)}

Как вы можете видеть, индекс 0 и индекс 1 из sampleArray содержат инициализированные целые числа, тогда как остальные индексы содержат неинициализированные целые числа.

Затем они выполняют следующую операцию:

*sampleArray[0] = 10
*sampleArray[1] = 20

При этом значения sampleArray должны быть:

[0] => address (integer pointer) -> 10
[1] => address (integer pointer) -> 20
[2] => nil (integer pointer)
[3] => nil (integer pointer)
[4] => nil (integer pointer)

Мой вопрос: почему мысделайте это:

*sampleArray[0] = 10
*sampleArray[1] = 20

А не это:

sampleArray[0] = 10
sampleArray[1] = 20

Мне кажется, что мы присваиваем значение указателю, который указывает на другой указатель.Не должны ли мы присвоить значение фактической памяти?

Почему бы и нет?

&sampleArray[0] = 10
&sampleArray[1] = 20

Я чрезвычайно новичок в указателях, поэтому, пожалуйста, любая ваша помощь будет полезна

1 Ответ

0 голосов
/ 01 июня 2018

На самом деле это хороший вопрос.

Оператор разыменования * имеет более низкий приоритет, чем доступ к массиву (что в C эквивалентно указателю deref).Так что *a[x] в Go означает «разыменование *a[x]», а не «разыменование a и взять элемент x».

Надеюсь, это прояснит ситуацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...