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