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)