Go 为什么&;数组打印的(地址)"&&引用;围棋
这是密码Go 为什么&;数组打印的(地址)"&&引用;围棋,go,Go,这是密码 package main func main() { var ax [2]int ax[0] = 22 ax[1] = 99 bx := ax cx := &ax fmt.Println(ax) fmt.Println(bx) fmt.Println(cx) fmt.Printf("%p\n", cx) } 当我执行它时,它会给我以下输出 PS C:\personal\gospace>
package main
func main() {
var ax [2]int
ax[0] = 22
ax[1] = 99
bx := ax
cx := &ax
fmt.Println(ax)
fmt.Println(bx)
fmt.Println(cx)
fmt.Printf("%p\n", cx)
}
当我执行它时,它会给我以下输出
PS C:\personal\gospace> ./bin/test
[22 99]
[22 99]
&[22 99]
0xc0420381d0
cx:=&ax
正确地将cx解释为指针。但当我打印cx时,它会打印&[22 99]
,当我打印&ax[0]
或%p
cx格式化程序时,它会正确地打印地址。为什么会出现这种行为?默认的打印动词fmt.Println
使用的是%v
。当打印它的值和指针值时,这就是为什么您会在cx
前面看到&
fmt.Println(cx)
接下来,您特别告诉fmt.Printf
使用动词%p
,请参阅小节,它将打印base 16符号,前导为0x
fmt.Printf("%p\n", cx)