Go语言学习之旅18——指针

Go语言的指针还是比较简单的,我们首先先了解基本的使用:

取址运算符:&

取出变量的内存地址:

1
2
3
4
func main() {
var a int = 10
fmt.Println(&a) // 输出:0xc000070008
}

指针类型:*int

定义一个指针类型并接受一个内存地址作为该变量的值:

1
2
3
4
5
6
func main() {
var a int = 10
var p *int
p = &a
fmt.Println(*p) // 取指针类型变量所指向的内存地址里,保存的值
}

注意:指针类型不赋值的时候,默认为<nil>,而不是NULL

不要使用没有合法指向的内存:

1
2
3
4
func main() {
var point *int
fmt.Println(*point)
}

报错信息为:

1
2
3
4
5
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x1090d27]

goroutine 1 [running]:
main.main()

因为该指针类型的变量并没有被赋值,因此取对应内存所保存的值时会报错