美文网首页
指针、引用还是传值

指针、引用还是传值

作者: Hmcf | 来源:发表于2020-11-14 13:31 被阅读0次
package main
import "fmt"
func main() {
    var i1 = 5
    fmt.Printf("An integer: %d, its location in memory: %p\n", i1, &i1)
    var intP *int
    intP = &i1
    fmt.Printf("The value at memory location %p is %d\n", intP, *intP)
}

package main
import "fmt"
func main() {
    s := "good bye"
    var p *string = &s
    *p = "ciao"
    fmt.Printf("Here is the pointer p: %p\n", p) // prints address
    fmt.Printf("Here is the string *p: %s\n", *p) // prints string
    fmt.Printf("Here is the string s: %s\n", s) // prints same string
}

Go 默认使用按值传递来传递参数,也就是传递参数的副本。
函数接收参数副本之后,在使用变量的过程中可能对副本的值进行更改,但不会影响到原来的变量。
如果你希望函数可以直接修改参数的值,而不是对参数的副本进行操作,你需要将参数的地址(变量名前面添加&符号,比如 &variable)传递给函数,这就是按引用传递,比如 Function(&arg1),此时传递给函数的是一个指针。如果传递给函数的是一个指针,指针的值(一个地址)会被复制,但指针的值所指向的地址上的值不会被复制;我们可以通过这个指针的值来修改这个值所指向的地址上的值。(译者注:指针也是变量类型,有自己的地址和值,通常指针的值指向一个变量的地址。所以,按引用传递也是按值传递。
几乎在任何情况下,传递指针(一个32位或者64位的值)的消耗都比传递副本来得少。
在函数调用时,像切片(slice)、字典(map)、接口(interface)、通道(channel)这样的引用类型都是默认使用引用传递(即使没有显式的指出指针)。
defer仅在函数返回时才会执行,在循环的结尾或其他一些有限范围的代码内不会执行。

命名返回值作为结果形参(result parameters)被初始化为相应类型的零值,
当需要返回的时候,我们只需要一条简单的不带参数的return语句。

func getX2AndX3_2(input int) (x2 int, x3 int) {

​           x2 = 2 * input

​           x3 = 3 * input

​           // return x2, x3

​           return

}

如果函数的最后一个参数是采用 `...type` 的形式,那么这个函数就可以处理一个变长的参数,
这个长度可以为 0,这样的函数称为变参函数。

func Greeting(prefix string, who ...string)

Greeting("hello:", "Joe", "Anna", "Eileen")

在 Greeting 函数中,变量 who 的值为 []string{"Joe", "Anna", "Eileen"}

相关文章

  • 指针、引用还是传值

    Go 默认使用按值传递来传递参数,也就是传递参数的副本。函数接收参数副本之后,在使用变量的过程中可能对副本的值进行...

  • 基于堆栈内存详析 Java函数形参是传值还是引用? | C++指

    Java的引用 及 Java函数形参是传值还是引用 Java中没有指针的说法,Java中的引用就类似于C++的指针...

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

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

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

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

  • 2018-05-07

    引用 左值引用 右值引用 引用本质 引用指针 int & 引用整数 本质指针int && 引用整数 本质指针 ...

  • 【golang】3.0 指针、数组、range关键字、Slice

    指针 指针在go语言中是一个很重要的概念,但比c语言简单多了。 指针简单在:指针不能运算参数传递:值传递还是引用传...

  • C++---CHAPTER 6: FUNCTION

    参数传递 传值调用 指针形参: 2.传引用调用 如果函数无需改变引用形参的值,最好将其声明为常量引用。 const...

  • JS中的引用类型

    JS 引用类型变量的值是一个指针,指向堆内存中的实际对象。 基本类型是传值调用 引用类型传共享调用 传值调用(Pa...

  • 学习PHP弱引用的知识

    之前的文章中,我们已经学习过引用和引用传值相关的知识。我们知道,PHP 中没有纯引用(指针),不管是对象,还是用引...

  • go学习第二天

    1.函数 引用类型 指针,slice(切片)、map、function、channel 值引用,指针引用 值引用...

网友评论

      本文标题:指针、引用还是传值

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