Go语言二级指针(指针的指针)
二级指针又叫做指针的指针,是一个指针变量指向另一个指针变量,另一个指针变量指向某个变量,如指针 A 的值是指针 B 的内存地址,指针 B 的值是某个变量的内存地址,如下图所示。
	
图 1 指针的指针
从图 1 看到,指针的指针(指针A)、指针变量(指针B)和某个变量的内存地址之间形成了一种递进关系。
指针的指针的使用方式与指针的使用方式略有不同,其语法格式如下:
根据指针的指针的语法格式,我们编写简单的应用示例,代码如下:
运行上述代码,运行结果为:
	
	

图 1 指针的指针
从图 1 看到,指针的指针(指针A)、指针变量(指针B)和某个变量的内存地址之间形成了一种递进关系。
指针的指针的使用方式与指针的使用方式略有不同,其语法格式如下:
// 定义指针的指针 var name **type // 从指针的指针获取某个变量的值 v := **name语法说明如下:
- name 代表指针变量名,使用两个取值操作符“*”定义为指针的指针;
 - type 是指针变量的数据类型,如数字、字符串、切片等 Go 语言内置的数据类型;
 - v 是从指针的指针获取某个变量的值,必须使用两个取值操作符“*”实现。
 
根据指针的指针的语法格式,我们编写简单的应用示例,代码如下:
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,其内存地址为 A。
 - 指针 ptr 为字符串类型的指针变量,存放变量 str 的内存地址(即内存地址A),指针 ptr 的内存地址为 B。
 
运行上述代码,运行结果为:
	字符串str为:hello,空间地址为:0xc00000e020 
	指针变量ptr为:0xc00000e020,空间地址为:0xc00000e018 
	指针的指针pptr为:0xc00000e018,空间地址为:0xc00000e010 
	指针的指针pptr取变量str的值:hello
 ICP备案:
 公安联网备案: