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)
}