Go语言中地址传递引出的不解问题

thao888 · · 2925 次点击
调用 remove 时实际上是把 stu 的指针复制了一份传入函数内部,在 remove 内部的 stu 可以理解为指向同一个块内存的不同指针,你打印一下指针的地址就知道了。 ```go type Student struct { Name string } func remove(stu *Student) { fmt.Printf("%v\n", &stu) fmt.Println("2----", stu) stu = nil fmt.Println("3----", stu) } func main() { stu := &Student{"中国"} fmt.Println("1----", stu) fmt.Printf("%v\n", &stu) remove(stu) fmt.Println("4----", stu) } ```
#8
更多评论
指针是对指向内容的引用,不是对指针变量的引用
#1
import "fmt" type Student struct { Name string } func remove(stu *Student) { fmt.Println("2----", stu) *stu = Student{"我爱你"} fmt.Println("3----", stu) } func main() { stu := &Student{"中国"} fmt.Println("1----", stu) remove(stu) fmt.Println("4----", stu) } 你要修改的是局部指针指向的变量的值,所以用*stu改变其值,否则stu只是改变了方法作用域内局部指针指向的变量,并没有改变外部指针指向的变量的值域
#2