这是执行代码
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时,它会正确地打印地址。为什么会这样呢?
cx := &ax
&[22 99]
&ax[0]
%p
默认的打印动词fmt.Println使用是%v。虽然在打印区分价值VS指针值,这就是为什么你看到&前面cx。
fmt.Println
%v
&
cx
fmt.Println(cx)
接下来,您具体告诉fmt.Printf使用动词%p,请参阅“ 打印”部分,然后进行打印base 16 notation, with leading 0x。
fmt.Printf
base 16 notation, with leading 0x
fmt.Printf("%p\n", cx)