我试图通过将该切片的指针传递给函数AppendVertex
来将顶点附加到顶点切片中,我知道如何使用len
函数获取数组的长度,但有没有办法得到指针数组的长度?
type Vertex struct {
X int
Y int
}
func main() {
var v []Vertex
fmt.Println(len(v))
appendVertex(&v)
fmt.Println(len(v))
}
func appendVertex(v *[]Vertex) {
*v = append(*v, Vertex{1, 1})
fmt.Println(len(v))
}
这个结果是
prog.go:22:16: invalid argument v (type *[]Vertex) for len
我还通过将指针传递给切片来做另一个版本,但切片的大小没有改变,切片是不是参考类型结构?为什么这里的尺寸没有改变
type Vertex struct {
X int
Y int
}
func main() {
var v []*Vertex
fmt.Println(len(v))
appendVertex(v)
fmt.Println(len(v))
}
func appendVertex(v []*Vertex) {
v = append(v, &Vertex{1, 1})
fmt.Println(len(v))
}
第二个结果是
0
1
0
答案 0 :(得分:5)
如果你想要v指向的东西的长度,请执行:
fmt.Println(len(*v))
在第二个示例中,您将传递一个切片,该切片包含长度,容量和指向支持数组中切片第一个元素的指针。如果你修改了一个元素,它将被修改(因为指针的副本仍将指向相同的支持数组),但如果你追加,你正在创建一个新的切片(我相信),但即使没有,你的原始切片长度会使它在新元素之前结束。