美文网首页
简述go函数的传值与传指针

简述go函数的传值与传指针

作者: Willworkgogogo | 来源:发表于2016-10-21 01:43 被阅读0次

传值

当传一个参数值到被调用函数里面时,实际上是传递了这个值的一份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回来看到纸条就能轻易的找到那本书了。这里的纸条就是一个`指针`。指针只是一个计算机为此设计的术语,如果是你发明了自己的计算机语言,你可以把这纸条命名为任何你喜欢的东西,比如香蕉、番茄🍅。意思是这个指针本质上是一样的,不管它叫什么名字,它的作用含义就是指明了某个信息的内存地址。 我觉得可以把指针就简单的等同于内存地址,方便理解就行。

相关文章

  • 简述go函数的传值与传指针

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

  • C++学习笔记(与安卓平台无关)

    C++语法 const指针 template定义 定义函数时参数类型的选择 函数参数可以传值,传引用或者传指针,如...

  • 今日小结

    指针传参 在函数间指针变量做参传值,只传地址,不附带其他信息。故以数组名为指针变量被函数调用传参后,在调用函数内s...

  • 数组和切片区别

    数组赋值会直接拷贝一份,而切片赋值会传指针。 函数传参,同上 当切片append的时候,go会考虑切片的cap值,...

  • go指针传递和值传递

    在函数传参的时候,见有人用指针传,如下: 就想着为什么非要传指针呢,你要Info,直接写在函数返回值里不也可在函数...

  • 一起来了解一下 c++的三种函数形参传递

    c++ 的形参 大致可以分三种 ,传值 ,传指针 传 引用, 传值 ,不改变原来函数外变量的值,原来是几 还是...

  • golang面试基础系列-传值&传指针(二)

    在 Go 中函数传递参数有传值和传指针两种类型,本文将从细节之处剖析两者的不同。 先看一个demo: 将打印出什么...

  • PHP中的数组

    数组分类 索引数组 关联数组 数组遍历 传值遍历 传址遍历 数组函数 指针操作函数 current($array)...

  • 第一章 c++过程化编程

    学习内容: 命名空间 指针与动态分配内存 引用与指针传参、返回指针、递归、函数默认值、重载的使用 掌握C++11的...

  • Python 函数(2)

    这篇主要总结Python函数参数传递。 背景### 函数的参数传递方式常见的有三种:1、传值调用;2、传指针调用;...

网友评论

      本文标题:简述go函数的传值与传指针

      本文链接:https://www.haomeiwen.com/subject/wemquttx.html