我试图通过将该 slice 的指针传递给函数 AppendVertex
来将一个顶点附加到该顶点 slice 中,我知道如何使用 获取数组的长度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
我还通过将指针传递给 slice 做了另一个版本,但是 slice 的大小没有改变,slice 不应该是一个引用类型结构吗?为什么这里的大小没有改变
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
最佳答案
如果你想要 v 指向的东西的长度,做:
fmt.Println(len(*v))
https://play.golang.org/p/JIWxA2BnoTL
在你的第二个例子中,你正在传递一个 slice ,它包含一个长度、容量和一个指向 slice 后备数组中第一个元素的指针。如果你修改一个元素,它会同时被修改(因为指针的副本仍然指向同一个后备数组),但是如果你追加,你正在创建一个新的 slice (我相信),但即使没有,无论如何,您的原始 slice 长度都会使其在新元素之前结束。
关于arrays - 在 Golang 中获取指针数组的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49786194/