package main
import (
"fmt"
)
type A int
func main() {
var a A = 12
fmt.Printf("%p", &a) //0xc0000120b8
fun1(&a) // 9
fmt.Printf("%d", a) //0xc0000120b8
fun2(a) // 9
fmt.Printf("%d", a) //0xc0000120b8
}
func fun1(a *A) {
fmt.Println(a) //0xc0000120b8
*a = 9
}
func fun2(a A) {
fmt.Println(&a) // 0xc0000120f0
a = 10
}
总结
go中默认按值传递传递参数,在fun2函数中修改变量a不会影响原来的变量a,而通过指针传递可以修改原来的变量。fun2的a拷贝了main中a变量,值相同地址不同,所以在这里的a和main方法里面的a内存地址不一样。
2646

被折叠的 条评论
为什么被折叠?



