指针类型
go语言中也有指针,但是go语言中指针的不支持指针运算,例如 a = *p++
在go中是不支持的。
指针变量的本质是指向存储某个类型值的内存地址。所有的指针类型大小都一样受系统平台影响,跟指向的值类型无关。
指针使用 变量名 *变量类型
申明。 指针类型的0值为nil
。
var p *int //p 为指向int类型的指针,目前值为nil
a := 1
p = &a //p指针存了a变量的内存地址,类似0xc0000140e0这样的一个内存地址。
*p = 2 //这里*的左右是让p指针指向的内存值改成2
fmt.Println(*p,a) //2,2 a的值也变成2
c:=3
p= &c //p保持了c的内存地址,到吃p和a的关系解除
go的指针虽然不能进行运算,但是指针带来了操作内存的便捷性。同时在一些需要拷贝的场景(比如函数传参),使用指针可以减少额外的内存开销和提供性能。涉及指针的问题,后续章节会有更多的例子。