乙個指標變數指向了乙個值的記憶體位址。類似於變數和常量,在使用指標前需要宣告、定義乙個指標變數。
宣告乙個指標變數,格式:
var var_name *
type
示例:
var ip *
int/* 宣告整型指標變數 */
var fp *
float32
/* 宣告浮點型指標變數 */
指標使用流程:
宣告指標變數。
為指標變數賦值。
訪問指標變數中指向位址的值。
package main
import
"fmt"
func
main()
結果:
a 變數的記憶體位址是: c0000b4008
ip 變數儲存的指標位址是: c0000b4008
*ip 變數的值: 20
當乙個指標變數被宣告後,卻沒有分配到任何數值時,它的值為 nil(空)。nil 在概念上和其它語言的 null、none、nil、null 一樣,都指代零值或空值。
package main
import
"fmt"
func
main()
結果:
ptr 的值為 : 0
空指標判斷:
if
(ptr !=
nil)
/* ptr 不是空指標 */
if(ptr ==
nil)
/* ptr 是空指標 */
雙重指標,即指向指標的指標。
var ptr *
*int
;
示例:
package main
import
"fmt"
func
main()
結果:
變數 a = 3000
指標變數 *ptr = 3000
指向指標的指標變數 **pptr = 3000
甚至,還可以寫成三重指標,即:指向指標的指標的指標。
ptr3 -> ptr2e -> ptr1 -> a
示例:
package main
import
"fmt"
func
main()
結果:
a: 1
ptr1 0xc00012c008
ptr2 0xc000124018
ptr3 0xc000124020
*ptr1 1
**ptr2 1
***ptr3 1
傳入指標實參,顯然是一次引用傳遞,只需要在函式宣告的形參列表上設定為指標型別即可。在函式呼叫時可以改變其值。
package main
import
"fmt"
func
main()
/* 交換函式這樣寫更加簡潔,也是 golang 的特性 */
func
swap
(x *
int, y *
int)
結果:
交換後 a 的值 : 200
交換後 b 的值 : 100
Go 語言程式設計 高階資料型別 陣列
向函式傳遞陣列 指標陣列 陣列是具有相同資料型別的一組已編號且長度固定的資料項序列,可以是任意的原始資料型別也可以是自定義的資料型別。陣列元素可以通過索引 位置 來讀取 或者修改 索引從 0 開始,第乙個元素索引為 0,第二個索引為 1,以此類推。golang 陣列宣告需要指定元素型別及元素個數,使...
Go 語言程式設計 高階資料型別 Map 集合
集合 map 是一種無序的 hash 鍵值對集合。通過 key 來快速檢索 value,所以我們可以像迭代字串 陣列和切片那樣迭代它。golang 的 map 資料型別類似於 python 的字典資料型別,但封裝程度較原始。可以使用用 map 關鍵字來宣告乙個 map 變數,也可以使用內建的 mak...
go語言資料型別之指標
初識 任何程式資料載入記憶體後,在記憶體都有他們的位址,這就是指標。而為了儲存乙個資料在記憶體中的位址,我們就需要指標變數。go語言中的指標不能進行偏移和運算,因此go語言中的指標操作非常簡單,我們只需要記住兩個符號 取位址 和 根據位址取值 go語言中的值型別 int float bool str...