Что означает «и я», когда я: = & б - PullRequest
0 голосов
/ 13 мая 2019

Я учусь на ходу, я попробовал '&', чтобы получить адрес памяти. Но я понял, что означает '& i', а 'i' происходит от i: = & b, b - это int.

b := 7
i := &b
fmt.Println(&b) //print => 0xc000088000
fmt.Println(i) //print => 0xc000088000
fmt.Println(&i) //print => 0xc00000e018

В этом случае, что означает «и я»?

Ответы [ 3 ]

4 голосов
/ 13 мая 2019

& является оператором адреса , оценка которого приводит к адресу памяти, который при передаче в пакет fmt обычно адрес памяти печатается в шестнадцатеричном формате(«нотация 16 с начальным 0x»).

Адрес памяти - это просто адрес памяти.Не имеет значения, является ли это адрес переменной int или string, или переменной типа указателя.При печати все они выглядят «одинаково».

Оператор адреса:

Для операнда x типа T операция адреса &x создаетуказатель типа *T на x.

Таким образом, оператор адреса дает вам значение указателя, которое при разыменовании возвращает исходное значение.

&b будет адресом переменной b,типа *int, который при разыменовании: *b даст вам (значение) b.

&i будет адресом переменной i, типа **int, который при разыменовании: *i даст вам значение i, которое является адресом b.Так что если вы также разыменовываете что: **(&i), это также даст вам (значение) b.

1 голос
/ 13 мая 2019

Поэтому оператор & генерирует указатель на свой операнд. Таким образом, &i в основном генерирует указатель на i, который уже является указателем на b, который является ничем иным, как адресом памяти. Поэтому, когда вы делаете fmt.Println(&i), он печатает адрес памяти i.

1 голос
/ 13 мая 2019

Здесь &b возвращает адрес b, и тот же адрес сохраняется в i. Поскольку i также является переменной, &i будет возвращать адрес переменной i.

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