传递值与传递指针
假如有一个变量:
1 | var a int = 0 |
这时要通过一个函数set改变a的值:
1 | func set (a int){ |
在main函数中调用:
1 | func main(){ |
最终a的结果还是0。
这是因为传递到set方法中的是a变量值得拷贝:
1 | var a int = 0//假设a变量地址为 0xc00005e1b0 |
看看内存中的情况:
如何解决这个问题?在Golang中只需要传递指针即可,对上面的代码做出修改:
1 | var a int = 0 |
再来看看内存中的情况:
注意:
一定要是*a =1
这才意味着改变的是a对应地址指向的值
如果是a =1
首先肯定编译不通过,因为a变量需要指向的是一个地址,而1不是地址。
其次如果a(里面的)=另外一个地址,那么外面a还是不会变化:
使用时一定要注意细节,一不留神就出问题。
原创,如有雷同纯属偶合。