golang指針能夠這樣理解:自己爲一個整型常量,但因爲其聲明時爲指針,所以擁有了特殊的能力,即在其前增長 * ,便可直接訪問內存編號爲該整型常量的數據。而對於某個定義的常量,在前面加 & ,也能夠得到數據的內存編號。
當咱們定義結構體指針時,問題出現了:golang
type name int8 type first struct { a int b bool name } func main(){ var type1 = first{1, false, 2} var type_pointer *first = &type1 fmt.Println(type_pointer) }
上面的代碼打印的結果爲:&{1 false 2}
由此可推論,結構體自己並無表明其自身的內存地址,存在內存地址的是結構體內部的數據信息,只得打印出這樣的數據。指針
所以,咱們進行以下打印:code
fmt.Println(&type_pointer.a, type_pointer.a, &type_pointer, (*type_pointer).a)
輸出結果爲:0x110120f8 1 0x11006128 1
內存
能夠這樣解釋:
&type_pointer.a:等同於&(*type_pointer).a
type_pointer.a:等同於(*type_pointer).a
上面這兩種能夠理解爲golang語言的簡便寫法寫法(若是不這麼理解無法解釋輸出),不推薦這樣寫,
&type_pointer:指針自己的內存地址
(*type_pointer).a:指針指向的結構體,該結構體內部的a數據數據
此外,相似於*type_pointer.a
這種寫法是非法的。語言