2017-06-19 82 views
2

這裏的陣列打印的(地址)「和」是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它正確地打印地址。這是爲什麼?

回答

6

默認打印動詞fmt.Println使用是%v。在打印differentiates值與指針值時,這就是爲什麼您在cx前看到&

fmt.Println(cx) 

接下來,您明確告訴fmt.Printf使用動詞%p,請參閱printing部分,並將其打印base 16 notation, with leading 0x

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