首页 > 编程笔记

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

二级指针又叫做指针的指针,是一个指针变量指向另一个指针变量,另一个指针变量指向某个变量,如指针 A 的值是指针 B 的内存地址,指针 B 的值是某个变量的内存地址,如下图所示。


图 1 指针的指针

从图 1 看到,指针的指针(指针A)、指针变量(指针B)和某个变量的内存地址之间形成了一种递进关系。

指针的指针的使用方式与指针的使用方式略有不同,其语法格式如下:
// 定义指针的指针
var name **type
// 从指针的指针获取某个变量的值
v := **name
语法说明如下:
根据指针的指针的语法格式,我们编写简单的应用示例,代码如下:
package main

import (
    "fmt"
)

func main() {
    var str string = "hello"
    var ptr *string
    var pptr **string
    ptr = &str
    pptr = &ptr
    fmt.Printf("字符串str为:%v,空间地址为:%v\n", str, &str)
    fmt.Printf("指针变量ptr为:%v,空间地址为:%v\n", ptr, &ptr)
    fmt.Printf("指针的指针pptr为:%v,空间地址为:%v\n", pptr, &pptr)
    // 从指针的指针取某个变量值
    fmt.Printf("指针的指针pptr取变量str的值:%v\n", **pptr)
}
在上述代码中,我们分别定义了变量 str、指针变量 ptr 和指针的指针 pptr,三者之间的关系说明如下:
运行上述代码,运行结果为:

字符串str为:hello,空间地址为:0xc00000e020 
指针变量ptr为:0xc00000e020,空间地址为:0xc00000e018 
指针的指针pptr为:0xc00000e018,空间地址为:0xc00000e010 
指针的指针pptr取变量str的值:hello

推荐阅读