傳值和傳址

今天遇到一個問題,在函數外定義了一個變量,然後在函數中給其賦值,結果怎麼都是爲空,糾結了好久,原來是一個很低級的傳值和傳值錯誤,總算得以解決,這裏用一個例子說明。
golang中在傳遞一個參數到函數的過程中其實是傳遞了一份copy,而原值不變,如果要改變原值,則必須傳址。

var a int
func add1(a int) int{
a=a+1
return a
}
func add2(a *int)int{
a=a+1
return a
}
func main(){
x:=3
fmt.Println(add1(a)) //輸出4
fmt.Println(a) //輸出3
fmt.Println(add2(a)) //輸出4
fmt.Println(a) //輸出4
}

發佈了44 篇原創文章 · 獲贊 21 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章