1、例子1
1)var a int ,在内存中为a 开辟了一个空间,地址是 0x0843A040, 存放a 的值 1
2)调用方法changeValue ,声明了一个p,为p开辟一块内存,地址是 0x0843A06a ,初始存放的值是0,
然后把a的内容的值赋值给p (p = a ),故p的值为1,
p = 10 ,进行了重新赋值,故P最终的值为 10
3)由于对a的内存没有做任何的修改,故a的最终值为 1
2、例子2
1)var a int ,在内存中为a 开辟了一个空间,地址是 0x0843A040, 存放a 的值 1
2)调用方法changeValue ,声明了一个p,为p开辟一块内存,地址是 0x0843A06a ,初始存放的值是0,
然后把 a的地址值给了p (p = &a),故p的内存中存放的是 a 的内存地址 0x0843A040;
如果是 p = 10,则是把 0x0843A040 改成 10
如果是 *p = 10,则是把 指针指向的地址0x0843A040 的内存值 改成10
3)a 的内存值已被修改为10,故 a = 10
3、代码举例
package main
import "fmt"
func main() {
a := 10
b := 20
swap(a,b)
fmt.Println("a=",a,"b=",b)
c := 10
d := 20
pswap(&c,&d)
fmt.Println("c=",c,"d=",d)
//2级指针
e := 1
var p *int = &e
fmt.Println("p=",p)
var pp **int = &p
fmt.Println("pp=",pp)
}
func swap(a int, b int) {
var tmp int
tmp = a
a = b
b = tmp
}
func pswap(pa *int, pb *int){
var tmp int
tmp = *pa
*pa = *pb
*pb = tmp
}
结果: