arrays - 在 Golang 中获取指针数组的长度

标签 arrays pointers go

我试图通过将该 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/

相关文章:

go - akka 或类似的 golang 替代方案来支持分布式并发?

javascript - 遍历数组并计算数组部分的平均值

javascript - 使用 array.push(obj) 错误创建对象数组

javascript - 从服务器刷新并仅更新新元素

c - 'unary *' 的类型参数无效(有 'int' )。基本上我在指针和结构的逻辑上遇到了麻烦

c - 为什么我的分数是零?

c++ - 在 C++ 中不使用显式 for 循环将 int [] 转换为字符串

c++ - 如何正确使用vector<uint8_t>.data()?

opencv - 对 "cv::optflow::createOptFlow_DualTVL1()"的 undefined reference

go - 如果发生 panic 并在 golang 的 defer func(){...}() 中处理,如何使方法返回值