首页 > 编程笔记 > Go语言笔记 阅读:6

Go语言中的二级指针(指向指针的指针)

如果第一个指针变量的值是第二个指针变量的内存地址,那么就把第一个指针变量称作指向指针的指针变量,又叫二级指针变量。

也就是说,定义一个指向指针的指针变量,第一个指针指向第二个指针的内存地址;第二个指针指向变量的内存地址。

声明指向指针的指针变量的语法格式如下:
var 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 = 目标越接近,困难越增加

相关文章