在一起开始,先把这句念三遍:
在Go语言中,函数参数默认传递的是值的拷贝,而不是传递指针或引用。因此,在函数内部修改一个数组的元素,不会影响到原始数组。
在Go语言中,函数参数默认传递的是值的拷贝,而不是传递指针或引用。因此,在函数内部修改一个数组的元素,不会影响到原始数组。
在Go语言中,函数参数默认传递的是值的拷贝,而不是传递指针或引用。因此,在函数内部修改一个数组的元素,不会影响到原始数组。
具体来看例子
示例1
package main
import (
"fmt"
)
var arr = [3]int{1, 2, 3}
func a(b [3]int) {
b[1] = 0
}
func main() {
fmt.Println("改前:", arr)
a(arr)
fmt.Println("改后:", arr)
}
结果1
改前: [1 2 3]
改后: [1 2 3]
这样子是不能修改数组内部的值
要能成功修改,得这样子修改:
示例2
package main
import (
"fmt"
)
var arr = [3]int{1, 2, 3}
func a(b *[3]int) {
b[1] = 0
}
func main() {
fmt.Println("改前:", arr)
a(&arr)
fmt.Println("改后:", arr)
}
结果2
改前: [1 2 3]
改后: [1 0 3]
这样就能成功修改。
当然还有另外一种修改方法:
示例3
package main
import (
"fmt"
)
var arr = []int{1, 2, 3}
func a(b []int) {
b[1] = 0
}
func main() {
fmt.Println("改前:", arr)
a(arr)
fmt.Println("改后:", arr)
}
结果3
改前: [1 2 3]
改后: [1 0 3]