1.指針的基本操作
go語言中,指針的用法類似c語言,具體操作請看demo:
package main
import "fmt"
func main() {
var a = 10
fmt.Printf("a = %d\n", a) //變量的值
fmt.Printf("&a = %p\n", &a) //變量的地址
// 保存某個變量的地址,需要指針類型,*int 保存int的地址, **int 保存 *int的地址
var p *int
p = &a //指針變量指向誰,就把誰的地址賦值給指針變量
fmt.Printf("p = %v, &a = %v, *p = %v\n", p, &a, *p)
*p = 666
fmt.Println(*p)
}
2.new函數
這裏的new
函數類似c++
中的new關鍵字,可以分配對應大小的空間,並且無需考慮delete
內存空間操作,因爲go語言配有垃圾回收機制。
package main
import "fmt"
func main() {
var p *int
//p是*int類型,指向int類型
p = new(int) //go語言有垃圾回收機制,不需要管new出來的空間的生命週期等問題
*p = 666
fmt.Println(*P)
}
3.指針的錯誤用法
go語言對指針進行操作時需要指針有合法的指向,否則就算非法操作。go語言中表示空的關鍵字爲nil
,類似c語言中的NULL
。
package main
import "fmt"
func main() {
var p *int // 如果沒有指向,go語言默認初始化爲nil值,下面那句p = nil是不必要的
p = nil // go語言中沒有NULL,空值爲nil
fmt.Println("p = ", p)
// *p = 666 ; 錯誤,因爲p沒有合法指向
//正確操作
var a int
p = &a
*p = 666
fmt.Println(*p)
}