在大多数语言中(如c++),传递数组会隐式地通过引用进行,因此在函数中对传递的数组进行的任何更改都会导致更改原始数组。我正在学习Golang,在Alan A.A. Donovan和Brian W. Kernighan的书《The Go Programming Language》中,它说它的行为与其他语言不同 - 它不会隐式地通过引用传递数组。
这使我有点困惑 - 那么不使用引用传递数组是否意味着不修改数组本身?让我举个例子:
在上面的代码中,数组并没有被引用传递,但是 reverse 函数却修改了原始数组,所以它的工作方式有点像 C++ 程序。谁能解释一下其中的区别呢?
PS:如果这是一个愚蠢的问题,我很抱歉,我完全是 Golang 的新手,正在努力理解基础知识。
这使我有点困惑 - 那么不使用引用传递数组是否意味着不修改数组本身?让我举个例子:
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]
}
}
在上面的代码中,数组并没有被引用传递,但是 reverse 函数却修改了原始数组,所以它的工作方式有点像 C++ 程序。谁能解释一下其中的区别呢?
PS:如果这是一个愚蠢的问题,我很抱歉,我完全是 Golang 的新手,正在努力理解基础知识。