一个很微妙的一个问题。从下面的代码可以看出:1、类型为“[5]int”的数组在作为参数时,其实作为值来传递的。2、 类型为“[]int”的数组在作为参数时,其实作为引用来传递的。代码片段(2):[代码] 数组作为参数时的值传递package mainimport "fmt"func modify(array [5]int) { array[0] = 10
fmt.Println("In modify(), array values:", array)
}func main() { array := [5]int{1,2,3,4,5}
modify(array)
fmt.Println("In main(), array values:", array)
}运行结果:In modify(), array values: [10 2 3 4 5]In main(), array values: [1 2 3 4 5][代码] 数组作为参数时的引用传递package mainimport "fmt"func modify(array []int) { array[0] = 10
fmt.Println("In modify(), array values:", array)
}func main() { array := []int{1,2,3,4,5}
modify(array)
fmt.Println("In main(), array values:", array)
}运行结果:In modify(), array values: [10 2 3 4 5]In main(), array values: [10 2 3 4 5]
3 回答
侃侃无极
TA贡献2051条经验 获得超10个赞
[]int和[5]int这两种表达方式在Go语言里有根本性的区别。[]int不是数组,而是数组切片(slice),而[5]int是一个数组。在Go语言中,数组是值类型,而数组切片是引用类型。
值类型变量在函数调用时的参数传递中会被完整拷贝一次变量内容,之后函数内操作的只是这个拷贝的副本。这是第32页例子中所表现出来的,函数内对数组的修改不会影响函数外的原始数组内容的原因。一般而言,参数类型会选择数组切片而非数组,以避免拷贝所导致的性能损耗。
开满天机
TA贡献1786条经验 获得超12个赞
package main
import "fmt"
func modify(array []int) {
array[0] = 10
fmt.Println("In modify(), array values:", array)
}
func main() {
array := [5]int{1,2,3,4,5}
modify(array[0:])
fmt.Println("In main(), array values:", array)
}
- 3 回答
- 0 关注
- 136 浏览
添加回答
举报
0/150
提交
取消