[Go] 指標 pointer with golang
以前學C和C++對指標有很大誤解,老師對不起,但您說的內容,學生當時真的不太懂,事隔多年我努力用比較簡白的文字來描述,彌補當年慘烈成績的遺憾。
以下三個都在說同樣的一件事,但我不知道為什麼以前透過function傳接球,腦袋轉不過來。
PART I
指標只能存位址(address),你要嘛弄個指標的型態(如範例是*int)去存人家位置,要嘛用一般的變數去存一般的值
PART II
a 其實被宣告為*int
PART III
var a *int = &b
將『指標(命名為a) 指向b』用法就這樣,沒有別的,沒事不會亂用或單獨用『&』『*』
『int』 跟 『*int』雖然長得87分像,但兩個完全不一樣, 『int』叫做整數,『*int』如上的用途的時候叫做指標,指的對像是整數。如果『*int』可以改叫做『pointerToInt』之類的關鍵字,我大一也不會被當掉了,大概吧。
改值是另一件事, *a = 10,這時候的『星號』已經暗指a在之前已經被宣告成指標的type,這點很重要,『星號』在這時候的用途英文叫做derefference,
中文有人叫做『提取』,不管你是一層指標,還是像C語言有人有點毛病寫了三層指標,都可以想成一層一層將內容提取出來的概念,一但用了『提取』(*a = 10),不管在哪裡都會被改到。
*a 絕對不等於 var a *int 的意思
*a : a 已經被宣告成指標,提取a 的內容
var a *int : a 被宣告為指標型態,就跟被宣告為int或者string一樣稀鬆平常,你對於int的變數只能放int,對於string的變數只能放string,那指標只能放位址,只是有點複雜,指標的型態一定還有個附加屬性,這裡是int,所以宣告為* int
以下三個都在說同樣的一件事,但我不知道為什麼以前透過function傳接球,腦袋轉不過來。
PART I
b := 10
var a *int = &b
指標只能存位址(address),你要嘛弄個指標的型態(如範例是*int)去存人家位置,要嘛用一般的變數去存一般的值
PART II
b := 10
a:= &b
a 其實被宣告為*int
PART III
func main() {
b := 10
setFunc(&b)
}
func setFunc(a *int) {
}
var a *int = &b
將『指標(命名為a) 指向b』用法就這樣,沒有別的,沒事不會亂用或單獨用『&』『*』
『int』 跟 『*int』雖然長得87分像,但兩個完全不一樣, 『int』叫做整數,『*int』如上的用途的時候叫做指標,指的對像是整數。如果『*int』可以改叫做『pointerToInt』之類的關鍵字,我大一也不會被當掉了,大概吧。
改值是另一件事, *a = 10,這時候的『星號』已經暗指a在之前已經被宣告成指標的type,這點很重要,『星號』在這時候的用途英文叫做derefference,
中文有人叫做『提取』,不管你是一層指標,還是像C語言有人有點毛病寫了三層指標,都可以想成一層一層將內容提取出來的概念,一但用了『提取』(*a = 10),不管在哪裡都會被改到。
*a 絕對不等於 var a *int 的意思
*a : a 已經被宣告成指標,提取a 的內容
var a *int : a 被宣告為指標型態,就跟被宣告為int或者string一樣稀鬆平常,你對於int的變數只能放int,對於string的變數只能放string,那指標只能放位址,只是有點複雜,指標的型態一定還有個附加屬性,這裡是int,所以宣告為* int
Created Date : 2018/07/30
Last Updated Date : 2018/07/30
留言
張貼留言