我正在通过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

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

那为什么不呢?
&sampleArray[0] = 10
&sampleArray[1] = 20

我对指针非常陌生,因此请任何全心全意的帮助会有所帮助

最佳答案

这实际上是一个好问题。

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

希望这可以澄清事情。

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

10-11 23:06
查看更多