首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >go的值传递和引用传递以及引用类型的问题

go的值传递和引用传递以及引用类型的问题

作者头像
公众号-利志分享
发布2022-04-25 08:38:29
发布2022-04-25 08:38:29
1.4K0
举报
文章被收录于专栏:利志分享利志分享

package main import( "fmt" ) // int string 参数传递是值传递 非引用类型 // map 参数传递是值传递 引用类型 var a int = 9 var b string = "aa" var c map[int]int func modify1(a int) { fmt.Println("值:",a) fmt.Println("地址:",&a) a = 10 fmt.Println("值:", a) fmt.Println("地址:", &a) } func modify2(a string) { fmt.Println("值:",a) fmt.Println("地址:",&a) a = "cccc" fmt.Println("值:", a) fmt.Println("地址:", &a) } func modify3(a map[int]int) { fmt.Println("值:",a) fmt.Printf("地址:%p\n",&a) a[4] = 10 fmt.Println("值:", a) fmt.Printf("地址:%p\n",&a) } func main(){ fmt.Println("值:", a) fmt.Println("地址:", &a) modify1(a) fmt.Println("值:", a) fmt.Println("地址:", &a) fmt.Println("值:", b) fmt.Println("地址:", &b) modify2(b) fmt.Println("值:", b) fmt.Println("地址:", &b) c = make(map[int]int) c[4] = 9 fmt.Println("值:", c) fmt.Printf("地址:%p\n", &c) modify3(c) fmt.Println("值:", c) fmt.Printf("地址:%p\n", &c) } //Go语言中所有的传参都是值传递(传值),都是一个副本,一个拷贝。因为拷贝的内容有时候是非引用类型(int、string、struct等这些),这样就在函数中就无法修改原内容数据;有的是引用类型(指针、map、slice、chan等这些),这样就可以修改原内容数据。是否可以修改原内容数据,和传值、传引用没有必然的关系。在C++中,传引用肯定是可以修改原内容数据的,在Go语言里,虽然只有传值,但是我们也可以修改原内容数据,因为参数是引用类型。这里也要记住,引用类型和传引用是两个概念。再记住,Go里只有传值(值传递)。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-03-24,如有侵权请联系 cloudcommunity@tencent.com 删除
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档