指针用法
指针的使用,主要由两个运算符完成。
*
定义指针类型或者读取指针变量的值&
读取变量地址
指针使用例子:
// 定义int类型指针变量p
var p *int
// 初始化并且定义变量i
i := 42
// 将i变量的地址,赋值给p变量, 这个时候指针p指向变量i
p = &i
// 打印指针p,指向的值,这里输出42
fmt.Println(*p)
// 将100 赋值给指针p指向的存储空间,相当于赋值给变量i
*p = 100
指针总结
说明:对于Go语言,严格意义上来讲,只有一种传递,也就是按值传递(by value)。当一个变量当作参数传递的时候,会创建一个变量的副本,然后传递给函数或者方法,你可以看到这个副本的地址和变量的地址是不一样的。
- 指针类型用于传递地址, 而不是传递值, 因为 golang 的函数, 所有的参数都是传递一个复制的值. 如果值的体积过大, 那么就会严重降低效率, 而传递一个地址, 就会大大提高效率. 另外传递指针也能让 go 函数实现对变量值的修改.
- 如果一个复杂类型的值被传递了若干次后, 和自己比较, 虽然用于保存的容器和名称变了, 但用于保存值的地址不变, 这个时候, 只要使用指针进行对比, 就知道还是原来的东西.