代码如下:
```
type Student struct {
Name string
}
func remove(stu *Student) {
fmt.Println("2----", stu)
stu = nil
fmt.Println("3----", stu)
}
func main() {
stu := &Student{"中国"}
fmt.Println("1----", stu)
remove(stu)
fmt.Println("4----", stu)
}
```
执行结果:
```
1---- &{中国}
2---- &{中国}
3---- <nil>
4---- &{中国}
```
代码中传递的是地址,为什么没有改变掉stu的值,在第4步的值仍然不变
package main
import (
"fmt"
)
type Student struct {
Name string
}
func remove(stu **Student) {
fmt.Println("2----", *stu)
*stu = nil
fmt.Println("3----", *stu)
}
func main() {
stu := &Student{"中国"}
fmt.Println("1----", stu)
remove(&stu)
fmt.Println("4----", stu)
}
#4
更多评论
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