这是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时,它正确打印地址.为什么会这样?
默认打印动词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)