1.指针解释

1.1.值传递

内存的值变化
09.指针_数据交换
09.指针_Go_02
09.指针_值传递_03
09.指针_引用传递_04

1.2.引用传递(传递地址)

地址变化图
09.指针_数据交换_05
09.指针_指针传递_06
09.指针_指针传递_07
09.指针_指针传递_08
09.指针_值传递_09

1.3.示例

数据交换示例

points.go

package chapter06

import "fmt"

// swap 值传递
func swap(a int, b int) {
    var temp int
    temp = a
    a = b
    b = temp

}

// swap2 指针传递
func swap2(pa *int, pb *int) {
    var temp int
    temp = *pa // temp = main::a
    *pa = *pb  // main::a = main::b
    *pb = temp // main::b = temp
}

// Run
func Run() {
    var a int = 10
    var b int = 20

    // 值传递
    fmt.Println("值传递....")
    swap(a, b)
    fmt.Println("a = ", a, ", b = ", b)

    // 指针传递
    fmt.Println("指针传递....")
    swap2(&a, &b)
    fmt.Println("a = ", a, ", b = ", b)
}

points_test.go

package chapter06

import "testing"

func TestRun(t *testing.T) {
    Run()
}

执行结果

=== RUN   TestRun
值传递....
a =  10 , b =  20
指针传递....
a =  20 , b =  10
--- PASS: TestRun (0.00s)
PASS
ok      

2.总结

09.指针_值传递_10