我在玩谷歌的Go语言,遇到了一些在C语言中很基础但目前看到的文档并没有涵盖的问题。
当我将切片的指针传递给函数时,我以为我们可以通过以下方式访问它:
func conv(x []int, xlen int, h []int, hlen int, y *[]int)
for i := 0; i<xlen; i++ {
for j := 0; j<hlen; j++ {
*y[i+j] += x[i]*h[j]
}
}
}
但是Go编译器不喜欢这个:
sean@spray:~/dev$ 8g broke.go
broke.go:8: invalid operation: y[i + j] (index of type *[]int)
好的,我只是猜测而已。我有一个相当简单的解决方法:
func conv(x []int, xlen int, h []int, hlen int, y_ *[]int) {
y := *y_
for i := 0; i<xlen; i++ {
for j := 0; j<hlen; j++ {
y[i+j] += x[i]*h[j]
}
}
}
但是肯定有更好的方法。令人烦恼的是,当搜索大部分与Go有关的术语时,搜索引擎会混杂出现各种C/C++/不相关的结果,所以这种方式并不很有用。
go
标签进行标记,这样更多的人会来回答;Vatine已经为您这样做了。golang
是一个过时的标签;正如你所看到的,有117个问题被标记为go
,而只有3个错误地标记为golang
。 - peterSO*y
放到()
中 =>(*y)[index]
,然后尽情玩乐,参见play ground。 - Ivan Black