Go指標
阿新 • • 發佈:2018-11-02
Go指標
Go有指標,但沒有指標運算,無法使用指標自增自減運算。
新定義的或者沒有任何指向的指標值為nil
。
注意:引用空指標是不合法的,會使程式崩潰。
package main
import "fmt"
func main() {
var p *int // 定義一個指標變數
fmt.Printf("%v\n", p) // 列印指標變數,應為沒有指向,所以值為nil
var i int // 定義一個整形變數 i
p = &i // 使得 p 指向 i, 獲取 i 的地址
fmt.Printf("%v\n", p) // 列印變數 i 記憶體地址
*p = 520 // 修改指標指向記憶體地址的資料
fmt.Printf("%v\n", *p) // 列印520
fmt.Printf("%v\n", i) // 列印520
}
c = *p++ 在 Go 語言的程式碼中是不合法的。
Go 同樣也垃圾收集,也就是說無須擔心記憶體分配和回收。Go 有兩個記憶體分配方式,new 和 make ,它們應用於不同的型別。
用 new 分配記憶體
type test struct
{
name string
}
p := new (test)
用 make 分配記憶體
make 僅適用於 map,slice 和 channel,並且返回的不是指標。用 new 可以獲得特定的指標。
package main
import "fmt"
func main() {
var p *[] int = new ([] int ) // 分配slice結構記憶體;很少使用
var v [] int = make ([] int , 100) // v指向一個新分配的有 100 個整數的陣列
/*==========================*/
var p *[] int = new ([] int ) // 複雜例子
*p = make ([] int , 100, 100)
/*==========================*/
v := make ([] int , 100) // 一般使用
}