Как я могу получить адрес указателя? - PullRequest
0 голосов
/ 26 ноября 2018
package main

import "fmt"

func main() {
   var a int= 20   
   var ip *int    

   ip = &a 

   fmt.Printf("a address: %x\n", &a  )

   fmt.Printf(" the adrress that ip stored: %x\n", ip )
   /*I try to get the address of variable ip */
   fmt.Printf(" the address of ip: %d\n", &ip )

}

go run a.go

результат:

адрес: c420016078 адрес, который хранится в ip: c420016078 адрес ip: 842350510120

мой вопрос: является ли 842350510120 правильным адресом ip?

Ответы [ 3 ]

0 голосов
/ 26 ноября 2018

мой вопрос: является ли 842350510120 правильный адрес ip?

Никто не может ответить на этот вопрос.Это зависит от вашего компьютера и может даже меняться при каждом запуске программы.

Если вы спрашиваете, печатает ли fmt.Printf("%d", &ip) адрес ip: Да.

0 голосов
/ 26 ноября 2018

Если вы печатаете адреса в единообразной (шестнадцатеричной) базе, вы увидите ожидаемый результат.В текущих версиях компилятора Go gc переменные i и pi размещаются в куче.

Например,

package main

import "fmt"

func main() {
    var i int = 20
    var pi *int = &i
    fmt.Printf("%x the address of i\n", &i)
    fmt.Printf("%x the address of pi\n", &pi)
    fmt.Printf("%x the address that pi stored\n", pi)
}

Вывод:

c00008e010 the address of i
c000090018 the address of pi
c00008e010 the address that pi stored
0 голосов
/ 26 ноября 2018

Нет, вам нужно напечатать адрес, как% x, как вы делали в предыдущих операторах печати.Я думаю, это то, что смутило вас, поскольку адрес читался как int.

Рабочий код здесь, https://play.golang.org/p/v0UXMQ3fCkd

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