arrays - 如何附加到由指针标识的数组

标签 arrays pointers go slice

以下代码段错误 - 应该如何表述?

package main

func main() {
    var a *[]int
    *a = make([]int, 0)
    *a = append(*a, 1)
}

最佳答案

让你的指针示例工作

声明后,您的指针变量将为nil,,因此您无法设置指向的值(它还没有指向任何地方)。

您必须首先为指向的值分配内存,例如使用内置 new()功能:

var a *[]int
a = new([]int)
*a = make([]int, 0)
*a = append(*a, 1)

另一种选择是使用 slice composite literal ,并取其地址:

var a *[]int
a = &[]int{}
*a = make([]int, 0)
*a = append(*a, 1)

另一种选择是使用 slice 类型的另一个变量[]int,并将其地址分配给a:

var a *[]int
var b []int
a = &b
*a = make([]int, 0)
*a = append(*a, 1)

放弃指针

但是要知道使用 slice 不需要指针。您可以将 make() 的返回值赋给一个非指针 slice 变量:

var a []int
a = make([]int, 0)
a = append(a, 1)

关于arrays - 如何附加到由指针标识的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51650441/

相关文章:

python - NumPy 数组可以有值的元组吗?

jquery - 使用 jquery 将哈希数组传递到服务器

c++ - If 条件问题 (C++)

javascript - 在javascript中分配新数组

c - 使用指针对数组进行排序,不使用任何索引变量

c - C 中传递指针地址与指针到指针

c - C 中数组和指针的基本行为

go - 无法验证 ECDSA 签名

amazon-web-services - 通过 Go SDK (Amazon S3) 从 Bucket 生成 Torrent

sockets - 让socket.io客户端版本落后于服务器版本