我在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
我对指针非常新,所以请任何帮助都会有所帮助
答案 0 :(得分:0)
这实际上是一个很好的问题。
解除引用运算符*
的优先级低于数组访问权限(在C中等效于指针deref)。因此,Go中的*a[x]
表示“取消引用*a[x]
”,而不是“取消引用a
并使用元素x”。
希望这能澄清事情。