为什么数组的&(地址)打印"&"

man*_*nth 3 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)

}
Run Code Online (Sandbox Code Playgroud)

当我执行它时,它给我以下输出

PS C:\personal\gospace> ./bin/test
[22 99]
[22 99]
&[22 99]
0xc0420381d0
Run Code Online (Sandbox Code Playgroud)

cx := &ax正确地将cx解释为指针.但是当我打印cx时它打印出来&[22 99],当我打印&ax[0]%p格式化cx时,它正确打印地址.为什么会这样?

jee*_*tkm 7

默认打印动词fmt.Println使用是%v.虽然在打印区分价值VS指针值,这就是为什么你看到&前面cx.

fmt.Println(cx)
Run Code Online (Sandbox Code Playgroud)

接下来,您具体告诉fmt.Printf使用动词%p,参考打印部分并打印base 16 notation, with leading 0x.

fmt.Printf("%p\n", cx)
Run Code Online (Sandbox Code Playgroud)