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 mainimport "fmt"func main() {a := 10b := 20swap(a,b)fmt.Println("a=",a,"b=",b)c := 10d := 20pswap(&c,&d)fmt.Println("c=",c,"d=",d)//2级指针e := 1var p *int = &efmt.Println("p=",p)var pp **int = &pfmt.Println("pp=",pp)}func swap(a int, b int) {var tmp inttmp = aa = bb = tmp}func pswap(pa *int, pb *int){var tmp inttmp = *pa*pa = *pb*pb = tmp}
结果:
