如何在go中定义一个指针,然后将这个指针传递给一个func来改变它的值?

How to define a pointer in go, then pass this pointer in to a func to change its value?

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

您应该将一个整数传递给 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?", from the golang book.

中看到类似的示例

你的指针指向什么?为了操作指针指向的内存,您首先需要将指针指向某处。现在,您的 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 程序执行此操作。