【问题标题】:How to define a pointer in go, then pass this pointer in to a func to change its value?如何在go中定义一个指针,然后将这个指针传递给一个func来改变它的值?
【发布时间】:2015-03-08 03:54:23
【问题描述】:
import "fmt"

func zeroptr(ptr *int) {
    *ptr = 0
}

func main() {
    oneptr * int
    *ptr = 1
    fmt.Println("ptr is :", *ptr)
    zeroptr(ptr)
    fmt.Println("after calling zeroptr, the value of ptr is :", *ptr)
}

这不起作用,我正在寻找如下输出:

ptr 为 :1

调用zeroptr后,ptr的值为:0

【问题讨论】:

  • 请缩进您的代码。你的代码很难像这样阅读。

标签: pointers go


【解决方案1】:

你的指针指向什么?为了操作指针指向的内存,您首先需要将指针指向某个地方。现在,您的 ptr 指向无效的 nil。例如,您可以这样做:

func main() {
    var foo int
    var oneptr *int = &foo
    *oneptr = 1
    fmt.Println("oneptr is :", *oneptr)
    zeroptr(oneptr)
    fmt.Println("after calling zeroptr, the value of oneptr is :", *ptr)
}

为了将来,请在此处提交之前缩进您的代码。您可以使用gofmt 程序来做到这一点。

【讨论】:

    【解决方案2】:

    你应该使用 &int 传递给zeroptr,如this example

    package main
    
    import "fmt"
    
    func zeroptr(ptr *int) {
        *ptr = 0
    }
    
    func main() {
    
        var ptr int
        ptr = 1
        fmt.Println("ptr is :", ptr)
        zeroptr(&ptr)
        fmt.Println("after calling zeroptr, the value of ptr is :", ptr)
    }
    

    输出:

    ptr is : 1
    after calling zeroptr, the value of ptr is : 0
    

    您可以在“What's the point of having pointers in Go?”中看到类似的示例,来自golang book

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-05
      • 1970-01-01
      • 2021-11-02
      • 1970-01-01
      • 2017-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多