pointers - 简单的 Go 指针解释

标签 pointers go

我正在阅读一本 Go 电子书

这里我们创建了一个指针数组:

sampleArray := [5]*int{0: new(int), 1: new(int)}

如您所见,sampleArray 的索引 0 和索引 1 包含已初始化的整数,而其余索引包含未初始化的整数。

然后他们进行如下操作:

*sampleArray[0] = 10
*sampleArray[1] = 20

这样,sampleArray 的值应该是:

[0] => address (integer pointer) -> 10
[1] => address (integer pointer) -> 20
[2] => nil (integer pointer)
[3] => nil (integer pointer)
[4] => nil (integer pointer)

我的问题是,我们为什么要这样做:

*sampleArray[0] = 10
*sampleArray[1] = 20

不是这个:

sampleArray[0] = 10
sampleArray[1] = 20

在我看来,我们正在为指向另一个指针的指针赋值。我们不应该将值分配给实际的内存引用吗?

那为什么不呢?

&sampleArray[0] = 10
&sampleArray[1] = 20

我对指针非常陌生,所以请提供任何帮助

最佳答案

这其实是个好问题。

解引用运算符 * 的优先级低于数组访问(在 C 中相当于指针解引用)。所以 *a[x] 在 Go 中意味着“解引用 a[x]” 而不是“解引用 a 并获取元素 x”。

希望这能澄清事情。

关于pointers - 简单的 Go 指针解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50645899/

相关文章:

c++ - C++ 中是否有一种机制可以在没有动态内存分配的情况下从基类指针复制派生类的完整拷贝?

C++在矩阵中将列表初始化为NULL

c - 如何创建指向 3 维数组的 2 维的指针?

json - 如何在golang中按功能将标签添加到Struct

go - 在 cmd.Spec mow.cli 中接受空值

go - 在 GORM 中禁用 CreatedAt UpdatedAt DeletedAt 字段

c - 双指针的memset操作

pointers - Go中的临时地址?

reactjs - 使用 Kubernetes 部署并通过 Ingress 连接后 SSE 中断

goroutine 等待 channel 的响应并继续