设为首页 加入收藏

TOP

Go 到底有没有引用传参(对比 C++ )(二)
2017-09-30 13:21:41 】 浏览:7299
Tags:到底 有没有 引用 对比
nc1(m1) fmt.Println("调用 func1 后 m1 值:", m1, cap(m1)) } func func1 (a []string) { a = append(a, "val1") fmt.Println("func1中:", a, cap(a)) }

输出结果如下:

调用 func1 前 m1 值: [test] 1
func1中: [test val1] 2
调用 func1 后 m1 值: [test] 1

这个结果说明,调用前后切片并没有发生变化。之前例子中所谓的“变化”其实是切片中指向数组的指针指向的数组的元素发生了变化,这句话可能比较拗口,但实际如此。再次证明,引用类型的传参不是 pass-by-reference 。

想透彻的了解 一个切片是一个数组片段的描述。它包含了指向数组的指针,片段的长度这句话,有兴趣可以看这篇文章:http://www.2cto.com/kf/201604/499045.html。学习一下切片的内存模型

总结

总结很简单,语言也需要透过现象看本质。还有本文的结论需要记住:

There is no pass-by-reference in Go.

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇使用xorm工具,根据数据库自动生.. 下一篇Go数组、切片、映射的原理--简明..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目