Go编程语言中的指针是一个变量,用于存储另一个变量的内存地址。指针是一个特殊的变量,因此它甚至可以指向任何类型的变量。基本上,这看起来像是一个指针链。当我们定义一个指向指针的指针时,第一个指针将用于存储第二个指针的地址。这个概念有时被称为双指针。
如何在Golang中声明指向指针的指针?
将指针声明为Pointer类似于在Go中声明指针。区别在于我们必须在指针名称的名称之前放置一个额外的' * '。通常,当我们使用var关键字和类型声明指针变量时,就可以完成此操作。
示例1:在下面的程序中,指针pt2存储pt1指针的地址。解引用pt2即* pt2将给出变量v的地址,或者您也可以说指针pt1的值。如果您尝试** pt2,那么将给出变量v的值,即100。
package main import "fmt" func main() { //整数类型变量 var V int = 100 //获取一个指针 //的整数类型 var pt1 *int = &V //获取指向的指针 //指向pt1的指针存储地址 //将pt1转化为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:让我们在上面的程序中进行一些更改。通过使用解引用更改指针的值来为指针分配一些新值,如下所示:
// Go程序来说明指针指向指针的概念 package main import "fmt" func main() { // 定义int类型变量 var v int = 100 // 一个整数类型的指针 var pt1 *int = &v //获取指向的指针 //指向pt1的指针存储地址 //将pt1转化为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
相关知识:Go 指针