go 语言中关于数组值传递的一些疑惑

数组的值传递

在 go 语言中数组是一个值类型(value type)所有的值类型变量在赋值和作为参数传递时都将产生一次复制动作。
如果将数组作为函数的参数类型,则在函数调用时该参数将发生数据复制。
因此,在函数体中无法修改传入的数组的内容,因为函数内操作的只是所传入数组的一个副本

func main(){
	array := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
	fmt.Println("in function main, array values: ", array)
}

func modify(arr []int){
	arr[0] = -1
	fmt.Println("in function modify, array values: ", arr)
}
in function modify, array values:  [-1 2 3 4 5 6 7 8 9]
in function main, array values: [-1 2 3 4 5 6 7 8 9]
func main(){
	array := [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
	fmt.Println("in function main, array values: ", array)
}

func modify(arr [10]int){
	arr[0] = -1
	fmt.Println("in function modify, array values: ", arr)
}
in function modify, array values:  [-1 2 3 4 5 6 7 8 9 10]
in function main, array values: [1 2 3 4 5 6 7 8 9 10]

so how to explain?

Maybe arr []int transfer the address of arr, so the value can be changed, just like c? I guess!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值