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