【发布时间】:2023-04-05 23:44:01
【问题描述】:
在大多数语言(如 c++)中,传递数组会导致通过引用隐式传递它,因此对函数中传递的数组的任何更改都将导致更改原始数组。我正在学习 Golang,并且在 Alan A.A. 的“Go 编程语言”一书中。 Donovan 和 Brian W. Kernighan 据说,它的行为不同于其他语言——它不会通过引用隐式传递数组。
这让我有点困惑——这是否意味着传递没有引用的数组不应该修改数组本身?让我来说明一下:
func main() {
tab := []int{1, 2, 3}
fmt.Println(tab)
// Results in [1 2 3]
reverse(tab)
fmt.Println(tab)
// Results in [3 2 1]
}
func reverse(tab []int) {
for i, j := 0, len(tab)-1; i < j; i, j = i+1, j-1 {
tab[i], tab[j] = tab[j], tab[i]
}
}
在上面的代码中,数组不是通过引用传递的,但是反向函数修改了原始的,所以它的工作方式有点像 C++ 程序会做的事。谁能解释我的区别?
PS:对不起,如果这是一个愚蠢的问题,我对 Golang 完全陌生,并试图很好地理解基础知识。
【问题讨论】: