package main
import "fmt"
import "math/rand"
import "unsafe"
func main() {
a := 0
for i := 0; i < 10; i++ {
fmt.Println("start-->", a, unsafe.Pointer(&a))
a := f()
fmt.Println("end-->", a, unsafe.Pointer(&a))
}
}
func f() (int) {
return rand.Intn(100)
}
go run main.go
start--> 0 0xc0000b6010
end--> 81 0xc0000b6030
start--> 0 0xc0000b6010
end--> 87 0xc0000b6040
start--> 0 0xc0000b6010
end--> 47 0xc0000b6050
start--> 0 0xc0000b6010
end--> 59 0xc0000b6060
start--> 0 0xc0000b6010
end--> 81 0xc0000b6070
start--> 0 0xc0000b6010
end--> 18 0xc0000b6080
start--> 0 0xc0000b6010
end--> 25 0xc0000b6090
start--> 0 0xc0000b6010
end--> 40 0xc0000b60a0
start--> 0 0xc0000b6010
end--> 56 0xc0000b60b0
start--> 0 0xc0000b6010
end--> 0 0xc0000b60c0
package main
import "fmt"
import "math/rand"
import "unsafe"
func main() {
a := 0
for i := 0; i < 10; i++ {
fmt.Println("start-->", a, unsafe.Pointer(&a))
//a := f()
a = f()
fmt.Println("end-->", a, unsafe.Pointer(&a))
}
}
func f() (int) {
return rand.Intn(100)
}
go run main.go
start--> 0 0xc0000a4010
end--> 81 0xc0000a4010
start--> 81 0xc0000a4010
end--> 87 0xc0000a4010
start--> 87 0xc0000a4010
end--> 47 0xc0000a4010
start--> 47 0xc0000a4010
end--> 59 0xc0000a4010
start--> 59 0xc0000a4010
end--> 81 0xc0000a4010
start--> 81 0xc0000a4010
end--> 18 0xc0000a4010
start--> 18 0xc0000a4010
end--> 25 0xc0000a4010
start--> 25 0xc0000a4010
end--> 40 0xc0000a4010
start--> 40 0xc0000a4010
end--> 56 0xc0000a4010
start--> 56 0xc0000a4010
end--> 0 0xc0000a4010
这个坑在于变量a在第一段程序里面居然可以重复定义,还不报错!!!
打印start的时候,a指的是for循环外面定义的a;
打印end的时候,a指的是函数f返回的a
真是奇葩