【发布时间】:2020-04-04 12:05:21
【问题描述】:
代码如下:
package main
import "fmt"
func double(x *int) {
fmt.Printf("pointer of pointer #1: %p\n", &x)
fmt.Printf("pointer#1 : %p\n", x)
*x += *x
x = nil
fmt.Printf("pointer#2 : %p\n", x)
fmt.Printf("pointer of pointer #2: %p\n", &x)
}
func main() {
var a = 3
double(&a)
fmt.Println(a) // 6
fmt.Printf("pointer a in main: %p\n", &a)
p := &a
double(p)
fmt.Println(a, p == nil) // 12 false
fmt.Printf("pointer p in main: %p\n", p)
fmt.Printf("pointer of pointer p in main: %p\n", &p)
}
问题一:函数中的指针参数是获取指针的副本还是直接获取指针?
问题2:为什么double函数中的值x和main函数中的&a是一样的?
问题 3:如果 x 与 &a 的值相同,那么为什么当 x = nil &a 仍然有值而不是零?
【问题讨论】:
-
第一季度。指针的副本。 Q2。因为这就是副本的作用/含义。 Q3。因为1。
-
Go 很简单,每个作业都是一个副本。