值传递与引用传递的主要区别在于函数是否该百年原变量。一般情况下,值传递可以理解为简单的变量值的复制,而引用传递则是对值的地址的引用,而变量的地址是变量值的唯一标识,通过地址是可以改变原变量的。
引用传递过程如下,引用传递一般发生在形参中,作为函数的过客。
import (
"fmt"
)
func main() {
b := 10
add(b)
fmt.Printf("%d", b)
}
func add(a int) {
a = a + 100
}
// result
//a = 10
引用传递依赖变量的地址,大多数编程语言都是以指针表示变量地址类型。
由于指针通过变量地址来改变值,因此函数的逻辑直接操作地址使其值发送改变。
import (
"fmt"
)
func main() {
b := 10
delete(&b)
fmt.Printf("%d\n", b)
}
func delete(a *int) {
*a = 100 - *a
}
//result
// 90
在函数中直接对全局变量操作,通过指针改变了函数的作用域。
在Java中变量都是基于引用传递的,一般没有直接的值传递。
public static void main(String args[]){
int a = 10;
add(a);
System.out.println(a);
}
public void add (int a){
a = a + 1000;
}
在Go语言中make关键字和new关键字都可以生产变量,前者是生产切片slice,数组等,后者是基本数据类型的指针。
func main() {
a := new(int)
fmt.Println(a)
}
// result
// 0xc0000180a8
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/156131.html