funcaccumulate(counterPtr *int) { for i := 0; i < 5; i++ { *counterPtr++ defer fmt.Println(*counterPtr) } fmt.Printf("counter = %d \n", *counterPtr) }
funcmain() { var couter = 0 accumulate(&couter) }
输出结果:
1 2 3 4 5 6
counter = 5 5 4 3 2 1
2.GoLang中&与*的区别以及使用
&符号的意思是对变量取地址 *符号的意思是对指针取值
例子
1 2 3 4 5 6 7 8 9 10 11
funcmain() { var a *int// 存储的是int的指针,目前为空 var b int = 4// 存储的是int的值 a = &b // a 指向 b 的地址 a = b // a 无法等于 b,会报错,a是指针,b是值,存储的类型不同 fmt.Println(a) // a:0xc00000a090(返回了地址) fmt.Println(*a) // *a:4(返回了值) fmt.Println(*&a) // *抵消了&,返回了0xc00000a090本身 *a = 5// 改变 a 的地址的值 fmt.Println(b) // b:5,改变后 b 同样受到改变,因为 a 的地址是指向 b 的 }