这篇文章主要讲解了“go语言中是否引用传递”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“go语言中是否引用传递”吧! 没有。Go没有引用变量,所以Go语言里调用函数的时也没有引用传递。Go程序中定义的每个变量都占用一个惟一的内存位置,创建两个共享同一内存位置的变量是不可能的;可以创建两个指向同一内存位置的变量,不过这免费云主机域名与两个变量共享同一内存位置是不同的。需要明确的是,Go 没有引用变量,所以 Go 语言里调用函数的时也没有引用传递。在一些开发语言中(比如 C++),对已存在的变量可以声明别名,这种别名称为引用变量。
#includeintmain(){ inta=10; int&b=a; int&c=b; printf("%p%p%pn",&a,&b,&c);//0x7ffe114f0b140x7ffe114f0b140x7ffe114f0b14 return0; }
可以看到 a、b 和 c 都指向相同的内存位置。对 a 的写操作会影响 b 和 c。当你想在不同的范围内声明引用变量时,这是很有用的——即函数调用时。与 C++ 不同,Go 程序中定义的每个变量都占用一个惟一的内存位置。
packagemain import"fmt" funcmain(){ vara,b,cint fmt.Println(&a,&b,&c)//0x1040a1240x1040a1280x1040a12c }
创建两个共享同一内存位置的变量是不可能的。可以创建两个指向同一内存位置的变量,不过这与两个变量共享同一内存位置是不同的。
packagemain import"fmt" funcmain(){ varaint varb,c=&a,&a fmt.Println(b,c)//0x1040a1240x1040a124 fmt.Println(&b,&c)//0x1040c1080x1040c110 }
上面这段代码,b 和 c 都具有相同的值 — 即变量 a 的地址,但 a、c 存储在内存中不同的位置。改变 b 的内容不会影响到 c。错!map 和 channel 不是引用,如果是的话下面这段代码会输出 false。
packagemain import"fmt" funcfn(mmap[int]int){ m=make(map[int]int) } funcmain(){ varmmap[int]int fn(m) fmt.Println(m==nil) }
如果map m 是 C++ 风格的引用变量,则在 main() 声明的 m 和 在 fn() 声明的 m 会共享相同的内存空间。但是,因为对 fn() 中 m 赋值不影响 main() 的 m,所以我们可以看出 map 不是引用变量。感谢各位的阅读,以上就是“go语言中是否引用传递”的内容了,经过本文的学习后,相信大家对go语言中是否引用传递这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是百云主机,小编将为大家推送更多相关知识点的文章,欢迎关注!
相关推荐: C++模æ¿çå«ååé»è®¤åæ°æ¯ä»ä¹
C++免费云主机域名C++C++98/03(>>)static_castdynamic_castreinterpret_castconst_castC++98>>C++11C++11>>C++11C++相关推荐: vue如何…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。