golang 指针讨论
好几天没有更新了,因为小熊给老板打了包票,要把 10 天的工作,压缩在 5 天,怎么压缩,靠加班咯。今天回家以后连不上那几台服务器,加班不成,写写文章。
这两天特别惨,我的眼镜还丢了,上班只能靠很近才能看清。本来申请的显示器,被配送员送到其他同事那里了,结果那同事明知道箱子上的名字不是自己的还拆开用,要等明天才有的用了。我怎么这么倒霉??
go
语言的教程拖拖拉拉写了好久了,本身比较简单,按部就班的写影响到了我的学习进度,所以我要加速度了,从这一篇开始。话不多说现在开始。
指针
c
中有指针的概念,在 go
中也有,但是实际上用的比较少,因为指针容易出错,而且不易阅读。
每个变量都有他的地址
输出
指针用来存地址
输出,可以看到 ptr
存的值就是 a
的地址。
存的就是 a 的地址,ptr 的指向*ptr 肯定就是 a 本身了。
输出
指针的作用
指针可以消灭掉返回值,直接对参数做改变。
定义一个交换函数,形参为指针类型
调用
输出
虽然可以这么做,但是不推荐,因为 go
比 c++
多出来多返回值的特性,所以这里写在返回里可读性更强。
PS1: 但如果你的参数是比较复杂的类型,比如数组。用指针可以节省空间。
PS2: 对引用类型的操作会改变原引用类型的值,这里与指针有异曲同工之妙。
多维指针
刚刚用到的指针,只不过指向一个变量的地址,他就被叫做一维指针。
指针本身也是一个变量,是变量就有地址,所以指针也可以被取地址。
*int
类型的指针存的是 int
类型数据的地址,得到 *变量类型
就是他的指针,推导出指向 *int
变量的指针为 **int
类型,这种类型被称为二维指针,每多一个 *
就多一个维。
输出
PS1: 日常工作中,不建议使用多维指针,可读性不好,容易犯错误,一层指针能搞定的,一定不要使用多维炫技术。不然过几个月你自己都看不懂。
PS2: 不得不使用二维指针的场景:你希望在一个函数的参数中改变一个指针的值,你就只能传这个指针的指针给这个函数。
PS3:多维指针的唯一好处:减少传参
你在工作中啥时候用到了指针/多维指针?