1. 程式人生 > >Go語言學習第四課-go語言指標

Go語言學習第四課-go語言指標

看到指標不禁想起學C/C++指標時的恐怖,各種指標的加加減減,著實讓人頭大

go語言提供指標,但是相對於C/C++簡單的多。因為在Go語言中刪掉了指標運算部分,也就是不需要再對指標進行加加減減。

Go語言指標與引數傳遞

在定義函式後,一般都會向函式傳值。這樣就引入了兩種傳值方法,值傳遞和引用傳遞。

在c語言中,應該用過相應的傳遞方式。值傳遞傳入後,只是將傳遞的值進行一次拷貝。函式中無論對該變數進行操作。不會影響原值。但是引用傳遞(在傳遞值前加“&”),對該值得操作會改變傳入原值

在這裡著重要講的是,Go語言函式只有值傳遞。但是我們可以通過指標達到修改原值的目的。

以兩個數字交換為例加深理解。

package main

import "fmt"

func swap(a,b int)  {
	b,a = a,b
}

func swap2(a,b *int){
	*b,*a = *a,*b
}

func main() {
	//指標不能運算,
	//Go語言只有值傳遞一種方式
	a,b := 3,4
	swap(a,b)
	fmt.Println(a,b)
	swap2(&a,&b)
	fmt.Println(a,b)
}

Go語言空指標

當一個指標被定義後沒有分配到任何變數時,它的值為 nil。

nil 指標也稱為空指標。

nil在概念上和其它語言的null、None、nil、NULL一樣,都指代零值或空值。

一個指標變數通常縮寫為 ptr。

檢視以下例項:

package main

import "fmt"

func main() {
   var  ptr *int

   fmt.Printf("ptr 的值為 : %x\n", ptr  )
}

輸出結果為0

空指標判斷:

if(ptr != nil)     /* ptr 不是空指標 */
if(ptr == nil)    /* ptr 是空指標 */