为什么不能追加指向数组的指针?

问题描述 投票:2回答:2
package main

import "fmt"

type Circle struct {
  x string
}

func main() {
    circle := Circle{x: "blah"}
    results := make([]*Circle, 1)
    results = append(results, &circle)
    fmt.Printf("Here: %s\n", results[0].x)
}

如果我改变行results = append(results, &circle)results[0] = &circle工作正常。无法找到任何理由为什么会这样。

pointers go
2个回答
6
投票

你可以,只是你附加到切片,这意味着你添加的元素在results[1],而results[0]是一个nil指针(指针的默认值)。

你可以做results := make([]*Circle, 0, 1)给它一个容量为1,但长度为零,或者你可以做results := []*Circle{}(最紧凑),或者你可以简单地保留你分配给results[0]的版本,因为它工作正常。


2
投票

你可以,但是你使用长度为1的make,所以[0]索引已经设置(到零圆圈......)

将你的results[0].x改为results[1].x的作品,但不使用make按预期工作:

package main

import "fmt"

type Circle struct {
  x string
}

func main() {
    circle := Circle{x: "blah"}
    results := []*Circle{} // initialize empty slice of Circle pointers
    results = append(results, &circle)
    fmt.Printf("Here: %s\n", results[0].x)
}

在操场上跑:https://play.golang.org/p/7vMOfAXvgI

© www.soinside.com 2019 - 2024. All rights reserved.