//定义一个int类型变量
var v1 int= 10
//声明一个指向int指针变量,
var vp *int
//用取值运算符&拿到变量v1的内存地址,并把它保存在指针变量vp中
vp = &v1
//打印指针变量的值
fmt.Println(vp) //会打印一个0x开头的十六进制形式的地址,这里都没问题。。
//声明一个结构体类型
type student struct{
Id int
Name string
}
//定义一个student结构体变量
var st1 student = student{1,"小明"}
//声明一个student
var st1p *student
//用取值运算符&拿到变量st1变量的内存地址,并把它保存在指针变量st1p中
st1p = &st1
//打印指针变量的值,发现打印的不是0x开头的十六进制形式的内存地址,而是 &{1 小明}
fmt.Print(st1p)
有疑问加站长微信联系(非本文作者)

这是
fmt.Print
方法做了处理,更方便阅读,打印的结果 ,&
就表示是指针print方法做了什么出了,我怎样才能把结构体变量st1的内存地址打印出来了
fmt.Print(uintptr(unsafe.Pointer(st1p)))
打印指针地址用
print()
或者println()
就行了.fmt.Printf("%p\n", st1p)
上面的例子 打的是 int 类型, 下面的例子是打一个自定义的结构体类型, 也许是这里的区别