pointers - 简单的 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
我对指针非常陌生,所以请任何彻底的帮助都会有所帮助
解决方案
这实际上是一个很好的问题。
解引用运算符*
的优先级低于数组访问(在 C 中相当于指针解引用)。所以*a[x]
在 Go 中意味着“取消引用a[x]
”而不是“取消引用a
并获取元素 x”。
希望这可以澄清事情。