我很困惑为什么第 15 行无效。为什么指向 big.Int 的指针不能解除引用,而指向 int 的指针可以?

package main

import (
    "fmt"
    "big"
)

func main() {
    var c *int = getPtr()
    fmt.Println(c)
    fmt.Println(*c)

    var d *big.Int = big.NewInt(int64(0))
    fmt.Println(d)

    // does not compile - implicit assignment of big.Int
    // field 'neg' in function argument
    //fmt.Println(*d)
}

func getPtr() *int {
    var a int = 0
    var b *int = &a
    return b
}

最佳答案

这是因为 Int 是一个带有未导出字段的结构体。当您按值将结构传递给函数时,您正在制作它的副本。 Go spec 声明,这是合法的

关于pointers - 在 Go 中解引用指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2388909/

10-13 05:05