猿问

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

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


侃侃无极
浏览 172回答 2
2回答

哈士奇WWW

您应该使用将 &int 传递给zeroptr,如本例所示:package mainimport "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 : 1after calling zeroptr, the value of ptr is : 0您可以在golang 书中的“在 Go 中使用指针有什么意义? ”中看到类似的示例。

撒科打诨

你的指针指向什么?为了操作指针指向的内存,您首先需要将指针指向某处。现在,您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程序执行此操作。
随时随地看视频慕课网APP

相关分类

Go
我要回答