gpt4 book ai didi

go - 为什么“&”给我一些对象的内存地址,而没有给我?

转载 作者:行者123 更新时间:2023-12-01 22:38:03 24 4
gpt4 key购买 nike

这是有问题的代码(注释行“有问题的行”指向我在说什么):https://tour.golang.org/moretypes/20

为什么代码如下:

var a int
fmt.Println(&a)

给我一个内存地址...但是像这样的代码:
var m = map[string]Vertex{
"Bell Labs": Vertex{
40.68433, -74.39967,
}
...
fmt.Println(&m)

不那样吗

对象类型之间有区别吗?

最佳答案

有时可能很难说“为什么”某种方式,但是此行为在the documentation of the fmt package中指定。无论出于何种原因,指向简单对象(例如整数)的指针的默认格式是%p(十六进制的内存位置,前导0x),而指向复合对象(例如 map )的指针的默认格式是& plus复合对象的默认格式。

但这只是默认格式(%v),即fmt.Println生成的格式。如果要打印 map 的地址,可以切换到fmt.Printf(可让您指定自定义格式字符串),并显式使用%p:

    fmt.Printf("%p\n", &m)

关于go - 为什么“&”给我一些对象的内存地址,而没有给我?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60470833/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com