我正在阅读一本 Go 电子书
。
这里我们创建了一个指针数组:
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 中相当于指针解引用)。所以 *a[x]
在 Go 中意味着“解引用 a[x]
” 而不是“解引用 a
并获取元素 x”。
希望这能澄清事情。
关于pointers - 简单的 Go 指针解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50645899/