指针类型

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的指针虽然不能进行运算,但是指针带来了操作内存的便捷性。同时在一些需要拷贝的场景(比如函数传参),使用指针可以减少额外的内存开销和提供性能。涉及指针的问题,后续章节会有更多的例子。