代码如下:
```
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步的值仍然不变
调用 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
更多评论
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