获取Golang中指针数组的长度

时间:2018-04-12 00:24:40

标签: arrays pointers go

我试图通过将该切片的指针传递给函数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

1 个答案:

答案 0 :(得分:5)

如果你想要v指向的东西的长度,请执行:

fmt.Println(len(*v))

https://play.golang.org/p/JIWxA2BnoTL

在第二个示例中,您将传递一个切片,该切片包含长度,容量和指向支持数组中切片第一个元素的指针。如果你修改了一个元素,它将被修改(因为指针的副本仍将指向相同的支持数组),但如果你追加,你正在创建一个新的切片(我相信),但即使没有,你的原始切片长度会使它在新元素之前结束。