go語言指針

一個變量對應一個保存了變量對應類型值的內存空間。普通變量在聲明語句創建時被綁定到一個變量名,比如叫x的變量,但是還有很多變量始終以表達式方式引入,例如x[i]或x.f變量。所有這些表達式一般都是讀取一個變量的值,除非它們是出現在賦值語句的左邊,這種時候是給對應變量賦予一個新的值。

一個指針的值是另一個變量的地址。一個指針對應變量在內存中的存儲位置。並不是每一個值都會有一個內存地址,但是對於每一個變量必然有對應的內存地址。通過指針,我們可以直接讀或更新對應變量的值,而不需要知道該變量的名字(如果變量有名字的話)。

如果用“var x int”聲明語句聲明一個x變量,那麼&x表達式(取x變量的內存地址)將產生一個指向該整數變量的指針,指針對應的數據類型是*int,指針被稱之為“指向int類型的指針”。如果指針名字為p,那麼可以說“p指針指向變量x”,或者說“p指針保存了x變量的內存地址”。同時*p表達式對應p指針指向的變量的值。一般*p表達式讀取指針指向的變量的值,這裡為int類型的值,同時因為*p對應一個變量,所以該表達式也可以出現在賦值語句的左邊,表示更新指針所指向的變量的值。

<code>x := 1
p := &x // p, of type *int, points to x
fmt.Println(*p) // "1"
*p = 2 // equivalent to x = 2
fmt.Println(x) // "2"/<code>
<code>//定義f函數,返回指針,也就是變量地址
func f() *int{
var x=3
return &x
}
//定義incr函數 參數是指針,一個指針變量,返回的是這個指針指向的值

func incr(i *int) int{
*i++
return *i
}
func main(){
fmt.Println(f()) //地址1
fmt.Println(f()) //地址2
x:=1
fmt.Println(incr(&x)) //2
fmt.Println(incr(&x))//3
}/<code>


分享到:


相關文章: