免费资源网-
前言
本文主要介绍参数传递的相关内容,分享给大家参考和学习。 下面就不多说了,来看看详细的介绍吧。
关于参数传递,文档中有这样一句话:
在它们之后,调用的 是按值传递给
和 .
函数调用参数按值传递,而不是通过指针或引用传递。 经过测试得出,当参数变量为指针或者隐式指针类型时,参数传递方式也是按值传递(指针本身的拷贝)
切片是最常用的数据结构之一。 我们以Slice为例来解释一下参数传递机制。
Slice的数据结构如下:
示例代码:
package main import "fmt" func main(){ slice := make([]int, 3, 5) fmt.Println("before:", slice) changeSliceMember(slice) fmt.Println("after:", slice) } func changeSliceMember(slice []int) { if len(slice) > 1 { slice[0] = 9 } }
函数执行结果为:
befor:[0 0 0] after:[9 0 0]
解释:
从数据结构图中可以看出,Slice可以理解为一种结构体类型,包括底层数组第一个元素的地址、数组len、。 slice对象在参数值传递的过程中传递的是三个字段的值。 ,其实函数中slice的内存地址和main中slice的内存地址是不一样的,但是字段值是一样的,第一个字段的值就是第一个元素的地址底层数组,因此可以直接更改元素内容
你可以对照下面的代码来理解:
package main func main() { value := new(int) modifyFunc(value) println("main:", value) } func modifyFunc(value *int) { value = nil println("modifyFunc:", value) }
结果:
modifyFunc: 0x0 main: 0xc820049f30
可以看到,即使将值作为指针传递,main中的变量value的值也没有改变,因为中间的value的值是一个指针,和main中的值是一样的,但是两个物体本身就是两个物体,读者可以仔细体会
总结
以上就是本文的全部内容。 希望本文的内容能够给您的学习或者工作带来一些帮助。 如果您有任何疑问,可以留言沟通。 感谢您的支持。
免费资源网-