为什么&阵列打印的(地址)"&"在去

时间:2017-06-19 23:56:42

标签: 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],当我为cx打印&ax[0]%p格式化程序时,它会正确打印地址。为什么会出现这种情况?

1 个答案:

答案 0 :(得分:6)

默认打印动词fmt.Println使用的是%v。在打印differentiates值与指针值时,这就是为什么在&前面看到cx的原因。

fmt.Println(cx)

接下来,您明确告诉fmt.Printf使用动词%p,请参阅printing部分并打印base 16 notation, with leading 0x

fmt.Printf("%p\n", cx)