值传递与引用传递

得意时要看淡,失意时要看开。不论得意失意,切莫大意;不论成功失败,切莫止步。志得意满时,需要的是淡然,给自己留一条退路;失意落魄时,需要的是泰然,给自己觅一条出路值传递与引用传递,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

值传递与引用传递的主要区别在于函数是否该百年原变量。一般情况下,值传递可以理解为简单的变量值的复制,而引用传递则是对值的地址的引用,而变量的地址是变量值的唯一标识,通过地址是可以改变原变量的。

引用传递过程如下,引用传递一般发生在形参中,作为函数的过客。
在这里插入图片描述

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

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!