Go語言學習六:指標與傳遞到函式的指標
阿新 • • 發佈:2019-02-18
package main import ( "fmt" ) const MAX int = 3 func main() { var a int = 20 var ip *int /* 宣告指標變數 */ ip = &a ip = &a /* 指標變數的儲存地址 */ fmt.Printf("a 變數的地址是: %x\n", &a) /* 指標變數的儲存地址 */ fmt.Printf("ip 變數的儲存地址: %x\n", ip) /* 使用指標訪問值 */ fmt.Printf("*ip 變數的值: %d\n", *ip) // 當一個指標被定義後沒有分配到任何變數時,它的值為 nil。 // nil 指標也稱為空指標。 // nil在概念上和其它語言的null、None、nil、NULL一樣,都指代零值或空值。 // 一個指標變數通常縮寫為 ptr。 var ptr *int fmt.Printf("ptr 的值為 : %x\n", ptr) //這裡指標是0 if ptr == nil { /* ptr 不是空指標 */ fmt.Println("這是空指標") } // 指標陣列 a1 := []int{10, 100, 200} var i int for i = 0; i < MAX; i++ { fmt.Printf("a1[%d] = %d\n", i, a1[i]) } // 有一種情況,我們可能需要儲存陣列,這樣我們就需要使用到指標。 var ptr1 [MAX]*int //只有常量才能設定成員數量 for i = 0; i < MAX; i++ { ptr1[i] = &a1[i] /* 整數地址賦值給指標陣列 */ } for i = 0; i < MAX; i++ { fmt.Printf("a[%d] = %d\n", i, *ptr1[i]) } // 指向指標的指標 var a2 int var ptr2 *int var pptr2 **int a2 = 3000 /* 指標 ptr 地址 */ ptr2 = &a2 /* 指向指標 ptr 地址 */ pptr2 = &ptr2 /* 獲取 pptr 的值 */ fmt.Printf("變數 a = %d\n", a2) fmt.Printf("指標變數 *ptr = %d\n", *ptr2) fmt.Printf("指向指標的指標變數 **pptr = %d\n", **pptr2) // 指標作為函式引數 /* 定義區域性變數 */ var a3 int = 100 var b int= 200 fmt.Printf("交換前 a3 的值 : %d\n", a3 ) fmt.Printf("交換前 b 的值 : %d\n", b ) /* 呼叫函式用於交換值 * &a3 指向 a3 變數的地址 * &b 指向 b 變數的地址 */ swap(&a3, &b); fmt.Printf("交換後 a3 的值 : %d\n", a3 ) fmt.Printf("交換後 b 的值 : %d\n", b ) } // 指標作為函式引數 func swap(x *int, y *int) { var temp int temp = *x /* 儲存 x 地址的值 */ *x = *y /* 將 y 賦值給 x */ *y = temp /* 將 temp 賦值給 y */ }