简单的指针解释

时间:2018-06-01 14:40:01

标签: pointers go

我在Go Ebook工作。

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

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

对我来说,看起来我们正在为指向另一个指针的指针赋值。 Shouln我们将值分配给实际的内存引用?

为什么不呢?

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

我对指针非常新,所以请任何帮助都会有所帮助

1 个答案:

答案 0 :(得分:0)

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

解除引用运算符*的优先级低于数组访问权限(在C中等效于指针deref)。因此,Go中的*a[x]表示“取消引用*a[x]”,而不是“取消引用a并使用元素x”。

希望这能澄清事情。