Go 之基礎速學 (四) golang 裡面的指標的理解和實操

huxiaobai_001發表於2020-04-30

指標?搞php的同學們可能比較陌生,搞過java或者c的同學們可能比較熟悉,由於各種原因,指標對於使用物件導向程式設計的現代程式設計師來說可能都很陌生,不過我們這裡對此會進行講解和解釋;
程式在記憶體當中儲存它的值,每個記憶體塊有一個地址,通常用十六進位制數表示,如:0x6b0820 變數透過記憶體地址可以找到記憶體塊裡面的值 如下圖所示:
Go 之基礎速學 (四) golang裡面的指標的理解和實操
golang裡面透過&符號獲取變數的記憶體地址 *獲取記憶體地址上的值

 //指標符號講解 案例一
 var name string = "huxiaobai"
 fmt.Print(&name) //表示去地址 記憶體當中的地址 16進位制的
 fmt.Print(*&name) //表示先&name取記憶體地址然後*取出&name地址上的值 和fmt.print(name)的值是一樣的
 //看到*好就是取值或者設定值  看到&符號就是讀記憶體地址

講到這還是沒明白指標是個什麼東西?
指標的宣告,一個指標變數指向了一個值的記憶體地址 指標其實是直接指向記憶體地址的
指標宣告格式如下:

var var_name *var-type
var-type為指標型別,var_name為指標變數名稱, *號用於指標變數是作為一個指標;
var ip *int   表示指向整型
var fp *float32 表示指向浮點型

迷糊啦吧,腦袋瓜子嗡嗡的吧?
看個案例吧,仔細看裡面的註釋哈

//指標的具體使用 案例二
  //每個變數都是儲存在記憶體塊當中 每個記憶體塊都有一個記憶體地址 這個記憶體地址當中存在一個特殊的資料型別叫做指標
  //宣告指標 name表示指標的名稱 *string表示這是一個指向string型別的指標也就是所指向的記憶體地址當中的值是string型別
  var name *string
 //上邊只是生命指標 使用new來產生一個記憶體地址 指向一個記憶體塊 目前記憶體塊當中值是空的  在沒有new之前是一個nil空
  name = new(string)
 //為指標指向的記憶體塊當中塞入值 *除了取值還有設定值的功能
  *name = "wocao"
 //*name取出name指標指向的記憶體地址上的值
  fmt.Print(*name)

再看個案例,還是好好看裡面的註釋哈:

//指標的具體使用 案例三
  //常規的定義變數 沒啥好說的
  num := 20
  //定義指標變數 並且指標型別為int型別 這話上邊解釋過
  var anum *int
  //&符號可以獲取記憶體地址 並複製給了指標
  anum = &num
  //anum的指標指向了記憶體地址指向的記憶體款 透過*獲取記憶體地址上的值
  fmt.Print(*anum)

案例看懂了自然就懂了,不懂的話啊看手冊:4.9. 指標《Go 入門指南》

Go 之基礎速學 (四) golang 裡面的指標的理解和實操

本作品採用《CC 協議》,轉載必須註明作者和本文連結
胡軍

相關文章