在 Golang 中,如何理解“在函数之间传递变量时,总是以值的方式传递的”这句话?
请举例说明,谢谢!
http://books.studygolang.com/...,go程序设计语言 函数声明提到:
在函数体中,函数的形参作为局部变量,被初始化为调用者提供的值。函数的形参和有名返回值作为函数最外层的局部变量,被存储在相同的词法块中。
实参通过值的方式传递,因此函数的形参是实参的拷贝。对形参进行修改不会影响实参。但是,如果实参包括引用类型,如指针,slice(切片)、map、function、channel等类型,实参可能会由于函数的间接引用被修改。
这个是语言层面的设计了。
7 回答5.3k 阅读
6 回答6.9k 阅读✓ 已解决
4 回答2.3k 阅读
1 回答3.4k 阅读
2 回答937 阅读✓ 已解决
2 回答2.3k 阅读
1 回答2.2k 阅读
其含义就是函数体内使用的形参全部都是实参的拷贝,改变形参不会影响到实参,题主要举例,我就举个例好了:
可以看到不管是简单类型int,还是引用类型[]int,或者是指针*string,把变量传入到函数内修改,并不会影响到本身,本身的值是不会改变的,也也就是所谓的“在函数之间传递变量时,总是以值的方式传递”的意思。
对于简单类型int,传递变量也就是传递一个相同值的int。
对于引用类型[]int,传递变量也是引用的拷贝,它和原本的slice指向同一块内存区域,但是当你使用
b = []int{100,200}
改变它的指向后,不会影响到原本的变量。对于指针*string也是同理,传递变量也是指针的拷贝,它和原来的指针是指向同一块内存区域,你可以更改它的指向,不会影响到原本的变量。