3 回答
TA贡献1811条经验 获得超5个赞
具有Empty的类型[]
,例如[]int
实际上是切片,而不是数组。在Go中,数组的大小是该类型的一部分,因此要真正拥有一个数组,您需要具有[16]int
,而指向的指针将是*[16]int
。因此,您实际上已经在使用切片,而指向切片的指针*[]int
则是不必要的,因为切片已经通过引用传递了。
例子:
package main
import "fmt"
func sumPointerToArray(a *[8]int) (sum int) {
for _, value := range *a { sum += value }
return
}
func sumSlice (a []int) (sum int) {
for _, value := range a { sum += value }
return
}
func main() {
array := [...]int{ 1, 2, 3, 4, 5, 6, 7, 8 }
slice := []int{ 1, 2, 3, 4 }
fmt.Printf("sum arrray via pointer: %d\n", sumPointerToArray(&array))
fmt.Printf("sum slice: %d\n", sumSlice(slice))
slice = array[0:]
fmt.Printf("sum array as slice: %d\n", sumSlice(slice))
}
编辑:自首次发布以来,已更新以反映Go中的更改。
TA贡献1833条经验 获得超4个赞
长度是数组类型的一部分,您可以通过len()内置函数来获取数组的长度。因此,您无需传递xlen,hlen参数。
在Go中,将数组传递给函数时,几乎总是可以使用slice。在这种情况下,您不需要指针。实际上,您无需传递y参数。这是C输出数组的方式。
在Go风格中:
func conv(x, h []int) []int {
y := make([]int, len(x)+len(h))
for i, v := range x {
for j, u := range h {
y[i+j] = v * u
}
}
return y
}
调用函数:
conv(x[0:], h[0:])
- 3 回答
- 0 关注
- 209 浏览
添加回答
举报