一尘不染

为什么数组的&(地址)在行中打印“&”

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> ./bin/test
[22 99]
[22 99]
&[22 99]
0xc0420381d0

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


阅读 254

收藏
2020-07-02

共1个答案

一尘不染

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

fmt.Println(cx)

接下来,您具体告诉fmt.Printf使用动词%p,请参阅“ 打印”部分,然后进行打印base 16 notation, with leading 0x

fmt.Printf("%p\n", cx)
2020-07-02