首页 > 解决方案 > 简单的 Go 指针解释

问题描述

我正在通过一个Go Ebook.

在这里,我们正在创建一个指针数组,如下所示:

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

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

然后他们执行以下操作:

*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

我对指针非常陌生,所以请任何彻底的帮助都会有所帮助

标签: pointersgo

解决方案


这实际上是一个很好的问题。

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

希望这可以澄清事情。


推荐阅读