最近写了个反转函数,将数组指针作为参数传入。在传入的过程中我发现如果不指明数组的长度程序就会报错,比如下列代码:
```
arr := [...]int{1, 2, 3, 4, 5, 6}
pfArr := &arr
// fmt.Printf("%p", pfArr)
// fmt.Println(*pfArr)
reverse(pfArr)//报错
func reverse(x *[]int){}
```
而当给函数指明了数组长度后就能正常运行,但这样会限制数组的长度。请问有解决方式吗?
pfArr 是数组指针
reverse(x *[]int) 中的x是切片指针, 类型都不一样
// 参考代码
arr := [...]int{1, 2, 3, 4, 5, 6}
pfArr := arr[:]
// fmt.Printf("%p", pfArr)
// fmt.Println(*pfArr)
reverse(&pfArr)
func reverse(x *[]int){}
#1
更多评论
数组和切片不是一种类型,你的参数是切片,传的参数是数组。要么把传的参数变成切片,要么把函数定义的参数变成数组。数组的长度也是该数组类型,因此不同长度的数组是完全不同的类型额。
#2