這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
1 func pointer_test() { 2 //null 指標,輸出為nil 3 var p *int 4 fmt.Printf("p: %v\n", p) 5 //指向局部變數,變數值初始為0 6 var i int 7 p = &i 8 fmt.Printf("p: %v,%v\n", p, *p) 9 //通過指標修改變數數值10 *p = 811 fmt.Printf("p: %v,%v\n", p, *p)12 //數組的初始化及輸出13 m := [3]int{3, 4, 5}14 fmt.Printf("m:%v--%v,%v,%v\n", m, m[0], m[1], m[2])15 //指標數組的初始化及輸出16 //j, k, l := 3, 4, 517 //x := [3]*int{&j, &k, &l}18 x := [3]*int{&m[0], &m[1], &m[2]}19 fmt.Printf("x:%v,%v,%v\n", x[0], x[1], x[2])20 fmt.Printf("*x:%v,%v,%v\n", *x[0], *x[1], *x[2])21 22 var n [3]*int23 n = x24 fmt.Printf("n:%v,%v,%v\n", n[0], n[1], n[2])25 //指向數組的指標,也即二級指標的使用26 y := []*[3]*int{&x}27 fmt.Printf("y:%v,%v\n", y, y[0])28 fmt.Printf("*y[0]:%v\n", *y[0])29 fmt.Printf("*y[][]:%v,%v,%v\n", *y[0][0], *y[0][1], *y[0][2])30 /*31 *X -> v32 [3]X -> [v0][v1][v2]33 []X -> [v0]...[vi]34 [3]*X -> [p0][p1][p2]35 | | |36 j k l37 []*[3]*X -> [n0]...[ni]38 | ... |39 [p0]->j40 [p1]->k41 [p2]->l42 */43 }44 45 type Student struct {46 name string47 id int48 score uint49 }50 51 func memery_test() {52 //new分配出來的資料是指標形式53 p := new(Student)54 p.name = "China"55 p.id = 6333356 p.score = 9957 fmt.Println(*p)58 //var定義的變數是數值形式59 var st Student60 st.name = "Chinese"61 st.id = 66633362 st.score = 10063 fmt.Println(st)64 //make分配slice、map和channel的空間,並且返回的不是指標65 var ptr *[]Student66 fmt.Println(ptr) //ptr == nil67 ptr = new([]Student) //指向一個空的slice68 fmt.Println(ptr)69 *ptr = make([]Student, 3, 100)70 fmt.Println(ptr)71 stu := []Student{{"China", 3333, 66}, {"Chinese", 4444, 77}, {"Chince", 5555, 88}}72 fmt.Println(stu)73 }