这是转码
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
格式化程序时,它会正确打印地址。为什么会出现这种情况?
答案 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)