Yua*_* Hu 0 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))
}
Run Code Online (Sandbox Code Playgroud)
这个的结果是
prog.go:22:16: invalid argument v (type *[]Vertex) for len
Run Code Online (Sandbox Code Playgroud)
我还通过将指针传递给切片来做另一个版本,但是切片的大小没有改变,切片是不是参考类型结构?为什么这里的尺寸没有改变
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))
}
?
Run Code Online (Sandbox Code Playgroud)
第二个结果是
0
1
0
Run Code Online (Sandbox Code Playgroud)
如果你想要v指向的东西的长度,做:
fmt.Println(len(*v))
Run Code Online (Sandbox Code Playgroud)
https://play.golang.org/p/JIWxA2BnoTL
在第二个示例中,您将传递一个切片,该切片包含长度,容量和指向支持数组中切片第一个元素的指针.如果你修改了一个元素,它将被修改(因为指针的副本仍将指向相同的支持数组),但如果你追加,你正在创建一个新的切片(我相信),但即使没有,你的原始切片长度会使它在新元素之前结束.
| 归档时间: |
|
| 查看次数: |
3810 次 |
| 最近记录: |