Go 語言程式設計 高階資料型別 指標

2021-10-07 19:44:11 字數 1875 閱讀 9460

乙個指標變數指向了乙個值的記憶體位址。類似於變數和常量,在使用指標前需要宣告、定義乙個指標變數。

宣告乙個指標變數,格式:

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...