博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
简述go函数的传值与传指针
阅读量:5745 次
发布时间:2019-06-18

本文共 797 字,大约阅读时间需要 2 分钟。

传值

当传一个参数值到被调用函数里面时,实际上是传递了这个值的一份copy拷贝。

所以在被调用函数里修改参数值时,调用函数中相应的实参不会发生任何变化,因为数值变化只作用在拷贝上

传值演示

当我们调用函数add的时候,add接收的参数其实是x的copy,而不是x本身

copy使用过程

传指针

接下来解决如何把x本身传入,即达到真正改变x值的效果

立马想到要去获取变量的内存地址:&x,通过内存地址就能真正的修改x的值

如何使用呢?

我们需要将x所在地址&x传入函数,并将函数的参数的类型由int改为*int,即改为指针类型,才能在函数中修改x变量的值。

传指针实现通过函数修改变量的目的

传指针的好处

1.传指针使得多个函数能操作同一个对象。

2.传指针比较轻量级 (8bytes),只是传内存地址,我们可以用指针传递体积大的结构体。如果用参数值传递的话, 在每次copy上面就会花费相对较多的系统开销(内存和时间)。所以当你要传递大的结构体的时候,用指针是一个明智的选择。

3.Go语言中channel,slice,map这三种类型的实现机制类似指针,所以可以直接传递,而不用取地址后传递指针。(注:若函数需改变slice的长度,则仍需要取地址传递指针)

`更新2017-09-29:`

看到一个有利于初学者理解`指针`的比喻。

A同学送书去B同学宿舍,B人不在,A就把书放在B书架的2层左数第三个,然后留了一张纸条在B的桌上,上面写了书的具体位置,这样B回来看到纸条就能轻易的找到那本书了。这里的纸条就是一个`指针`。指针只是一个计算机为此设计的术语,如果是你发明了自己的计算机语言,你可以把这纸条命名为任何你喜欢的东西,比如香蕉、番茄?。意思是这个指针本质上是一样的,不管它叫什么名字,它的作用含义就是指明了某个信息的内存地址。 我觉得可以把指针就简单的等同于内存地址,方便理解就行。

转载地址:http://mjazx.baihongyu.com/

你可能感兴趣的文章
apache安装报错undefined reference ssl
查看>>
关于爱情只有一句忠告
查看>>
CentOS 7下安装部署Oracle11g图文教程
查看>>
F#初学笔记06
查看>>
实战:将企业域名解析委派给企业DNS服务器
查看>>
在Lync 2013环境部署Office Web Apps
查看>>
微软大会Ignite,你准备好了么?
查看>>
读书笔记-高标管事 低调管人
查看>>
Master带给世界的思考:是“失控”还是进化
查看>>
用户和开发者不满苹果iCloud问题多多
查看>>
java.lang.UnsatisfiedLinkError:no dll in java.library.path终极解决之道
查看>>
我的工具:文本转音频文件
查看>>
【许晓笛】从零开始运行EOS系统
查看>>
【跃迁之路】【460天】程序员高效学习方法论探索系列(实验阶段217-2018.05.11)...
查看>>
C++入门读物推荐
查看>>
TiDB 源码阅读系列文章(七)基于规则的优化
查看>>
面试中会遇到的正则题
查看>>
Spring之旅第八站:Spring MVC Spittr舞台的搭建、基本的控制器、请求的输入、表单验证、测试(重点)...
查看>>
数据结构与算法——常用排序算法及其Java实现
查看>>
你所不知的Webpack-多种配置方法
查看>>