3 回答

TA貢獻(xiàn)1859條經(jīng)驗 獲得超6個贊
問題是您獲取的是循環(huán)/范圍變量的地址,而不是切片中項目的地址。然而,你只是為自己做了很多不必要的工作。首先,你為什么不使用i, v := range
或更好的i, _ :=
然后你可以做i-1
來獲得上一個項目?其次,即使你想把它保存在一個指針中,仍然使用這個語法然后賦值,p = &l[i]
這樣你就有了切片中項目的地址,而不是循環(huán)/范圍變量的地址。
當(dāng)使用索引顯然更好時,人們太急于使用 for/each 樣式構(gòu)造......如果您希望每次迭代都使用 index-1,那么使用索引應(yīng)該是您的首選方式。

TA貢獻(xiàn)1876條經(jīng)驗 獲得超7個贊
建立蒂姆的評論,似乎您可以復(fù)制每個循環(huán)上的值,而不是指針,然后取消引用它。
package main
import "fmt"
type t struct {
val int
}
func main() {
l := []t{{1}, {2}}
var p t
var i t
for _, i = range l {
fmt.Println("begin", &p)
p = i
fmt.Println("end", &p)
}
}

TA貢獻(xiàn)1719條經(jīng)驗 獲得超6個贊
另一種選擇是使用索引獲取指向當(dāng)前項的指針:
package main
import "fmt"
type t struct {
val int
}
func main() {
l := []t{{1}, {2}}
var p *t
for index, _ := range l {
fmt.Println("begin", p)
p = &l[index]
fmt.Println("end", p)
}
}
- 3 回答
- 0 關(guān)注
- 219 瀏覽
添加回答
舉報