1. 程式人生 > >Go指標

Go指標

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) // 一般使用 }