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
答案 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
程序执行此操作。