package main import "fmt" func main(){ a:=[]int{1,2,3} modifySlice(a) fmt.Println("main()中 a:",a) } func modifySlice(a []int){ a[0]=100 fmt.Println("对切片进行modify1()之后 a:",a) }
输出结果 对切片进行modifySlice()之后 a: [100 2 3]
main()中 a: [100 2 3]
package main import "fmt" func main(){ a:=[]int{1,2,3} modifySlice(a) fmt.Println("main()中 a:",a) } func modifySlice(a []int){ a[0]=100 fmt.Println("对切片进行modify1()之后 a:",a) }
输出结果 对数组进行modifyArray()之后 a: [100 2 3]
main()中 a: [1 2 3]
解决了这个问题之后,又遇到一个奇怪的问题,花了一点时间找到了问题所在,现在贴出来供参考:
当函数要返回经过操作之后的slice时,返回的slice的地址发生了改变,不再是传入的地址,代码如下
package main import ( "fmt" "unsafe" ) func main(){ a:=[]int{1,2,3} b:=modifySlice(a) fmt.Println(&a==&b) fmt.Println("作为参数的a的地址:",unsafe.Pointer(&a)) fmt.Println("modifySlice返回的a的地址:",unsafe.Pointer(&b)) } func modifySlice(a []int) []int{ a[0]=100 return a }
输出结果 false
作为参数的a的地址: 0x115520e0
modifySlice返回的a的地址: 0x115520f0