与C数组变量隐式作为指针使用不同,Go数组是值类型,赋值和传参操作都会复制整个数组数据。
func test(x[2]int) {
fmt.Printf("x: %p, %v\n", &x,x)
}
func main() {
a:= [2]int{10,20}
var b[2]int
b=a
fmt.Printf("a: %p, %v\n", &a,a)
fmt.Printf("b: %p, %v\n", &b,b)
test(a)
}
结果:
a:0xc820076050, [10 20]
b:0xc820076060, [10 20]
x:0xc8200760a0, [10 20]
如果需要,可改用指针或切片,以此避免数据复制。
func test(x*[2]int) {
fmt.Printf("x: %p, %v\n",x, *x)
x[1] +=100
}
func main() {
a:= [2]int{10,20}
test(&a)
fmt.Printf("a: %p, %v\n", &a,a)
}
结果:
x:0xc8200741c0, [10 20]
a:0xc8200741c0, [10 120]
网友评论