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 關注
- 240 瀏覽
添加回答
舉報