Go语言中的二级指针(指向指针的指针)
如果第一个指针变量的值是第二个指针变量的内存地址,那么就把第一个指针变量称作指向指针的指针变量,又叫二级指针变量。
也就是说,定义一个指向指针的指针变量,第一个指针指向第二个指针的内存地址;第二个指针指向变量的内存地址。
声明指向指针的指针变量的语法格式如下:
【实例】输出指向指针的指针变量指向的变量的值。
声明并初始化 string 类型的变量 str,再声明 string 类型的指针变量 ptr,以及 string 类型的指向指针 ptr 的指针变量 pptr。使用 & 字符获取变量 str 的内存地址,让指针 ptr 指向变量 str 的内存地址;再使用 & 字符获取指针 ptr 的内存地址,让指针 pptr 指向指针 ptr 的内存地址。格式化输出变量 str 的值、指针 ptr 指向变量的值,以及指针 pptr 指向变量的值,查看这 3 个值是否一致。
代码如下:
也就是说,定义一个指向指针的指针变量,第一个指针指向第二个指针的内存地址;第二个指针指向变量的内存地址。
声明指向指针的指针变量的语法格式如下:
var ptr **type参数说明如下:
- ptr:指向指针的指针变量的变量名;
- **:表示指向指针的指针变量;
- type:指向指针的指针变量的类型。
【实例】输出指向指针的指针变量指向的变量的值。
声明并初始化 string 类型的变量 str,再声明 string 类型的指针变量 ptr,以及 string 类型的指向指针 ptr 的指针变量 pptr。使用 & 字符获取变量 str 的内存地址,让指针 ptr 指向变量 str 的内存地址;再使用 & 字符获取指针 ptr 的内存地址,让指针 pptr 指向指针 ptr 的内存地址。格式化输出变量 str 的值、指针 ptr 指向变量的值,以及指针 pptr 指向变量的值,查看这 3 个值是否一致。
代码如下:
package main //声明 main 包 import "fmt" //导入 fmt 包,用于打印字符串 func main() { str := "目标越接近,困难越增加" //声明并初始化 string 类型的变量 str var ptr *string //声明 string 类型的指针变量 ptr var pptr **string //声明 string 类型的指向指针 ptr 的指针变量 pptr ptr = &str //使用&字符获取变量 str 的内存地址,再让指针 ptr 指向变量 str 的内存地址 pptr = &ptr //使用&字符获取指针 ptr 的内存地址,再让指针 pptr 指向指针 ptr 的内存地址 fmt.Printf("str = %s\n", str) //格式化输出变量 str 的值 fmt.Printf("*ptr = %s\n", *ptr) //格式化输出指针 ptr 指向的变量的值 fmt.Printf("**pptr = %s\n", **pptr) //格式化输出指针 pptr 指向的变量的值 }运行结果如下:
str = 目标越接近,困难越增加
*ptr = 目标越接近,困难越增加
**pptr = 目标越接近,困难越增加