Pointers 初始化指针数组-无法将类型*[]设为类型
这是一个简单的代码,将car-type对象保存到car-type数组中。我试图在这里使用指针来传递数组引用 有两个问题: 1-我无法将其初始化为空数组。当我使用make时,它会说: 无法生成类型*[]car 2-如果不使用make,则会发生运行时错误: 死机:运行时错误:无效内存地址或零指针取消引用 代码: 1-无法生成类型*[]车辆 你观察它是因为make创建了slice、map或chan。在您给出的示例中,您试图创建指向一个切片的指针,而该切片不是make使用的类型 2-如果不使用make,则会发生运行时错误: 这是另一个问题-你有一个指向汽车切片的类型指针,而不是汽车切片。通常,在使用之前需要初始化指针类型 总的来说,在您的情况下,不需要使用指向片的指针,而不需要使用普通片,因为您不需要使用append,这样就没有机会重新分配备份存储 然而,在真实场景中,当您不知道要添加的汽车实例数量时,最好使用append,而不是通过slice迭代到最后一个未初始化的值 总结: 要使您的程序工作,请将*[]车更改为[]车,例如 另一种可能更好的方法是使用append而不是saveCar。在发生重新分配时,不要忘记使用返回值,例如:Pointers 初始化指针数组-无法将类型*[]设为类型,pointers,go,struct,Pointers,Go,Struct,这是一个简单的代码,将car-type对象保存到car-type数组中。我试图在这里使用指针来传递数组引用 有两个问题: 1-我无法将其初始化为空数组。当我使用make时,它会说: 无法生成类型*[]car 2-如果不使用make,则会发生运行时错误: 死机:运行时错误:无效内存地址或零指针取消引用 代码: 1-无法生成类型*[]车辆 你观察它是因为make创建了slice、map或chan。在您给出的示例中,您试图创建指向一个切片的指针,而该切片不是make使用的类型 2-如果不使用make,
更改此选项将使代码正常工作: tCars:=制造[]辆汽车,4 _cars=&TCAR
你能更具体地说,你在这里想要实现什么,你在这里想要实现什么,看起来你做得不对。我正在尝试创建一个数组,并使用函数saveCar填充它。如果按值传递数组,则不会更新主数组。所以我试图传递数组的指针,这给了我上面的错误。你们不认为映射会更好,若你们要删除值。如果没有,那么append可以正常工作,只需将返回的数组存储到同一个变量。a=appenda,x…tCars:=make[]car,4_cars=&tCars,顺便说一句,我们在go中不使用下划线。你最后的评论,它完成了任务。我将&tCars传递给我的函数。把它作为答案贴出来,这样我就可以接受了。
import "fmt"
type car struct {
plate string
color string
}
func main() {
var _cars *[]car // list of cars
_cars = make(*[]car, 4) // initialize empty cars list
saveCar(_cars, car{"ABC-123", "Black"})
saveCar(_cars, car{"ABC-456", "Black"})
saveCar(_cars, car{"ABC-789", "Black"})
fmt.Println(_cars)
}
func saveCar(_cars_list *[]car, _car car) int {
for index, current := range *_cars_list {
// if empty place found, save car
if (car{}) == current {
// save car
(*_cars_list)[index] = _car
// return the saved index
return index
}
}
return -1
}