登录
首页 >  Golang >  Go问答

如何理解“在函数之间传递变量时,总是以值的方式传递的”这句话?

来源:SegmentFault

时间:2023-02-18 12:17:52 349浏览 收藏

本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《如何理解“在函数之间传递变量时,总是以值的方式传递的”这句话?》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~

问题内容

在 Golang 中,如何理解“在函数之间传递变量时,总是以值的方式传递的”这句话?

请举例说明,谢谢!

正确答案

其含义就是函数体内使用的形参全部都是实参的拷贝,改变形参不会影响到实参,题主要举例,我就举个例好了:

func test1(a int) {
    a = 10
}
func test2 (b []int){
    b = []int{100,200}
}
func test3 (c *string){
    str := "hello"
    c = &str
}
func main() {
    a := 1
    test1(a)
    fmt.Println(a) // 1
    b := []int{1,2}
    test2(b)
    fmt.Println(b) // [1 2]
    str := "hi"
    c := &str
    test3(c)
    fmt.Println(*c,c) // hi
}

可以看到不管是简单类型int,还是引用类型[]int,或者是指针*string,把变量传入到函数内修改,并不会影响到本身,本身的值是不会改变的,也也就是所谓的“在函数之间传递变量时,总是以值的方式传递”的意思。

对于简单类型int,传递变量也就是传递一个相同值的int。

对于引用类型[]int,传递变量也是引用的拷贝,它和原本的slice指向同一块内存区域,但是当你使用

b = []int{100,200}
改变它的指向后,不会影响到原本的变量。

对于指针*string也是同理,传递变量也是指针的拷贝,它和原来的指针是指向同一块内存区域,你可以更改它的指向,不会影响到原本的变量。

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表