指针类型

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