Go編程語言中的指針是一個變量,用于存儲另一個變量的內(nèi)存地址。指針是一個特殊的變量,因此它甚至可以指向任何類型的變量?;旧希@看起來像是一個指針鏈。當(dāng)我們定義一個指向指針的指針時,第一個指針將用于存儲第二個指針的地址。這個概念有時被稱為雙指針。
如何在Golang中聲明指向指針的指針?
將指針聲明為Pointer類似于在Go中聲明指針。區(qū)別在于我們必須在指針名稱的名稱之前放置一個額外的' * '。通常,當(dāng)我們使用var關(guān)鍵字和類型聲明指針變量時,就可以完成此操作。
示例1:在下面的程序中,指針pt2存儲pt1指針的地址。解引用pt2即* pt2將給出變量v的地址,或者您也可以說指針pt1的值。如果您嘗試** pt2,那么將給出變量v的值,即100。
package main import "fmt" func main() { //整數(shù)類型變量 var V int = 100 //獲取一個指針 //的整數(shù)類型 var pt1 *int = &V //獲取指向的指針 //指向pt1的指針存儲地址 //將pt1轉(zhuǎn)化為pt2 var pt2 **int = &pt1 fmt.Println("變量V的值為 = ", V) fmt.Println("變量V的地址為 = ", &V) fmt.Println("pt1的值為 = ", pt1) fmt.Println("pt1地址為 = ", &pt1) fmt.Println("pt2的值為 = ", pt2) //解引用 //指向指針的指針 fmt.Println("pt2地址的值為(*pt2) = ", *pt2) //雙指針將給出變量V的值 fmt.Println("*(pt2地址處的值為) 或 **pt2 = ", **pt2) }
輸出:
變量V的值為 = 100 變量V的地址為 = 0xc000062090 pt1的值為 = 0xc000062090 pt1地址為 = 0xc00008c018 pt2的值為 = 0xc00008c018 pt2地址的值為(*pt2) = 0xc000062090 *(pt2地址處的值為) 或 **pt2 = 100
示例2:讓我們在上面的程序中進(jìn)行一些更改。通過使用解引用更改指針的值來為指針分配一些新值,如下所示:
// Go程序來說明指針指向指針的概念 package main import "fmt" func main() { // 定義int類型變量 var v int = 100 // 一個整數(shù)類型的指針 var pt1 *int = &v //獲取指向的指針 //指向pt1的指針存儲地址 //將pt1轉(zhuǎn)化為pt2 var pt2 **int = &pt1 fmt.Println("變量v的值為 = ", v) //通過賦值來更改v的值 //指向指針pt1的新值 *pt1 = 200 fmt.Println("更改pt1后存儲在v中的值 = ", v) //通過賦值來更改v的值 //指向指針pt2的新值 **pt2 = 300 fmt.Println("更改pt2后存儲在v中的值 = ", v) }
輸出:
變量v的值為 = 100 更改pt1后存儲在v中的值 = 200 更改pt2后存儲在v中的值 = 300
相關(guān)知識:Go 指針