在Go语言中,数组作为参数传递给函数时,可以选择使用值传递或指针传递。这两种方式在行为上有显著的区别,主要体现在对原始数组的影响和性能上。
当数组以值传递的方式传递给函数时,函数会接收到数组的一个副本。这意味着在函数内部对数组的任何修改都不会影响到原始数组。
package main
import "fmt"
func modifyArray(arr [3]int) {
arr[0] = 100
fmt.Println("Inside modifyArray:", arr)
}
func main() {
arr := [3]int{1, 2, 3}
modifyArray(arr)
fmt.Println("After modifyArray:", arr)
}
Inside modifyArray: [100 2 3]
After modifyArray: [1 2 3]
modifyArray
函数接收的是数组 arr
的一个副本,因此在函数内部修改数组元素不会影响原始数组。arr
在函数调用后保持不变。当数组以指针传递的方式传递给函数时,函数会接收到数组的指针。这意味着在函数内部对数组的任何修改都会直接影响到原始数组。
package main
import "fmt"
func modifyArray(arr *[3]int) {
arr[0] = 100
fmt.Println("Inside modifyArray:", *arr)
}
func main() {
arr := [3]int{1, 2, 3}
modifyArray(&arr)
fmt.Println("After modifyArray:", arr)
}
Inside modifyArray: [100 2 3]
After modifyArray: [100 2 3]
modifyArray
函数接收的是数组 arr
的指针,因此在函数内部修改数组元素会直接影响原始数组。arr
在函数调用后被修改。通过理解这两种传递方式的区别,你可以根据实际需求选择合适的方式来传递数组参数。