如何在go中定义指针,然后将此指针传递给func以更改其值?

时间:2015-01-09 18:43:20

标签: pointers go

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

2 个答案:

答案 0 :(得分:1)

您应该使用传递& 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”中看到类似的示例。

答案 1 :(得分:0)

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