Go 語言指標

2022-10-09 07:36:09 字數 3312 閱讀 1332

變數是一種使用方便的佔位符,用於引用計算機記憶體位址(16進製制)。

go 語言的取位址符是 &,放到乙個變數前使用就會返回相應變數的記憶體位址。

package main

import "fmt"

func main()

//輸出結果:

什麼是指標:

乙個指標變數指向了乙個值的記憶體位址。

類似於變數和常量,在使用指標前你需要宣告指標。指標宣告格式如下:

var var_name *var-type
ar-type 為指標型別,var_name 為指標變數名,* 號用於指定變數是作為乙個指標。以下是有效的指標宣告

var ip *int        /* 指向整型*/

var fp *float32 /* 指向浮點型 */

指標使用流程:

在指標型別前面加上 * 號(字首)來獲取指標所指向的內容。

package main

import "fmt"

//指標宣告和賦值

func main()

//輸出結果:

a的值是 33

a的位址是: 0xc000014098

指標變數ip的值是: 0xc000014098

指標ip 指向的值: 33

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

nil 指標也稱為空指標。

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

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

package main

import "fmt"

func main()

//輸出結果:

ptr 的值為 : 0

空指標判斷:

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

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

package main

import "fmt"

func main() else

}//輸出結果:

空指標

示例:

package main

import "fmt"

func main()

for i := 0; i < len(a); i++

}//輸出結果:

a[0] = 10

a[1] = 100

a[2] = 200

有一種情況,我們可能需要儲存陣列,這樣我們就需要使用到指標。

以下宣告了整型指標陣列:

var ptr [max]*int;
ptr 為整型指標陣列。因此每個元素都指向了乙個值。以下例項的三個整數將儲存在指標陣列中:

package main

import "fmt"

func main() //定義乙個實際陣列

for i := 0; i < len(a); i++

//使用指標變數指向值,進行遍歷

for j := 0; j < len(ptr); j++

}//輸出結果:

第0個元素的指標位址是:824633762152

第1個元素的指標位址是:824633762160

第2個元素的指標位址是:824633762168

a[0] = 10

a[1] = 100

a[2] = 200

如果乙個指標變數存放的又是另乙個指標變數的位址,則稱這個指標變數為指向指標的指標變數。

指向指標的指標變數宣告格式如下:

var ptr **int;
以上指向指標的指標變數為整型。

訪問指向指標的指標變數值需要使用兩個 * 號,如下所示:

package main

import "fmt"

//指向指標的指標

func main()

//輸出結果:

a的值 1000

a的位址是 0xc000014098

指標ptr的值是(ptr): 0xc000014098

指標ptr指向的值(*ptr): 1000

指標pptr的值是(pptr): 0xc000006028

指標pptr指向的值(*pptr): 0xc000014098

指標pptr指向 指標ptr指向的值(**pptr): 1000

package main

import "fmt"

func main()

//輸出結果:

值 5

ptr指標指向位址對應的值 5

pts指標指向位址對應的值: 5

pto最終指向的位址對應的值(a) 5

pt3指向的指標(pto)所指向的指標的(ptr)位址 0xc000092010

pt3指向的指標(pto)所指向的指標(ptr)所指向的位址(a): 0xc00009a008

pt3最終指向的位址對應的值(a) 5

go 語言允許向函式傳遞指標,只需要在函式定義的引數上設定為指標型別即可。

指標屬於引用型別。

以下例項演示了如何向函式傳遞指標,並在函式呼叫後修改函式內的值,:

package main

import "fmt"

func main()

//定義兩個形參,型別是指標(&a,&b作為引數傳遞進入,因此,*x和&a是與同乙個記憶體位址關聯。*y與&b與同乙個記憶體位址關聯)

func swap(x, y *int)

//輸出結果:

交換前a=10,b=20

交換後a=20,b=10

package main

import "fmt"

//實際值的傳遞

func main()

func swap(x, y int) (a, b int)

//輸出結果:

交換前a=10,b=20

swap裡x=20,y=10

交換後a=20,b=10

Go 語言指標

b 什麼是指標 b 乙個指標變數指向了乙個值的記憶體位址。類似於變數和常量,在使用指標前你需要宣告指標。指標宣告格式如下 var var name var type var type 為指標型別,var name 為指標變數名,號用於指定變數是作為乙個指標。以下是有效的指標宣告 var ip int...

GO語言指標

以前學習的語言裡沒有指標操作,剛接觸到go語言指標,消化的比較慢,故寫一下。指標型別宣告 t,指標的型別為 t,例 var i int 指標型別的值 t 在等號左邊表示指標宣告var a int 32 p a p的值是指向a的位址在指標前加 獲取指標p指向的值,例 var a int 32 變數宣告...

Go語言指標

鏈客,專為開發者而生,有問必答!接下來讓我們來一步步學習 go 語言指標。我們都知道,變數是一種使用方便的佔位符,用於引用計算機記憶體位址。go 語言的取位址符是 放到乙個變數前使用就會返回相應變數的記憶體位址。package mainimport fmt func main 以上例項執行輸出結果為...