func printArray(my_arr []int){ // ERROR: cannot use arr (type [8]int) as type []int in argument to printArray
fmt.Println(len(my_arr))
}
func main(){
arr := [...]int{17,-22,15,20,33,25,22,19}
printArray(arr)
}
Run Code Online (Sandbox Code Playgroud)
与在 C++ 中一样,我们使用引用传递在函数中传递数组。我们可以在 Go 中做同样的事情吗?
在 Go 中,数组元素通过值传递,即目标函数获取传递的数组元素的副本。此外,[]int指的是元素的切片int而不是元素的数组。如果您想要类似传统 C 的行为,请按数组地址 as 传递数组printArray(&arr),并以 形式接收它array *[8]int。
但即使这种风格也不是 Go 的惯用风格。使用切片代替。
func printArray(arr []int){
fmt.Printf("%d\n", len(arr))
}
func main(){
arr := []int{17,-22,15,20,33,25,22,19}
printArray(arr)
}
Run Code Online (Sandbox Code Playgroud)
切片在内部只是指向后备数组的指针,因此即使按值传递,接收函数上对切片的任何更改都会修改原始后备数组,因此也会修改切片。
| 归档时间: |
|
| 查看次数: |
8140 次 |
| 最近记录: |