【问题标题】:Dereferencing pointers in Go在 Go 中取消引用指针
【发布时间】:2011-01-24 05:44:04
【问题描述】:

我对为什么第 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
}

【问题讨论】:

  • 输出为 0x110480(c 的地址) 0(c 的值) 0(我假设 d.String() 的结果)

标签: pointers go


【解决方案1】:

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

...T 的所有字段都必须是 导出,或者分配必须在 与 T 相同的包 宣布。换句话说,一个结构 可以将值分配给结构 变量仅当 结构可以被合法分配 由程序单独提供。

【讨论】:

    猜你喜欢
    • 2014-01-17
    • 2012-11-12
    • 2015-09-12
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 2012-05-23
    • 2020-03-17
    • 1970-01-01
    相关资源
    最近更新 更多