在以下代码中,为什么n
的值被修改? (playground link)
package main
import (
"fmt"
"math/big"
)
func main() {
n := big.NewInt(5)
nCopy := new(big.Int)
*nCopy = *n
// The values of "n" and "nCopy" are expected to be the same.
fmt.Println(n.String(), nCopy.String(), &n, &nCopy)
nCopy.Mod(nCopy, big.NewInt(2))
// The values of "n" and "nCopy", I would think, should be different.
fmt.Println(n.String(), nCopy.String(), &n, &nCopy)
}
阅读this answer似乎表示我的示例main()
中的第三行应该复制n
的内容。在两个Println
语句中输出的两个变量的地址似乎也表明两个big.Int
存储在不同的内存位置。
我意识到我可以使用*nCopy = *n
而不是nCopy.Set(n)
使用Println
,而我的最终*nCopy = *n
会显示我期望的内容。但我很好奇为什么{{1}}似乎保留了一个"链接"两个指针之间。