首先引用一段Go语音中文网的代码:
package main
import "fmt"
func main() {
var a int = 1 // int类型的值
var b *int = &a // *int类型的指针,理解指向一个类型为int的值的地址的指针类型
var c **int = &b // 指向*int的**int类型的指针
var x int = *b // int类型的值
fmt.Println("a = ",a)
fmt.Println("&a = ",&a) // 取a变量的内存地址
fmt.Println("*&a = ",*&a) // 对a变量的内存地址取值
fmt.Println("b = ",b) // *int类型的指针,a变量的内存地址
fmt.Println("&b = ",&b) // **int类型的指针,指向*int(a变量的内存地址)
fmt.Println("*&b = ",*&b) // 对**int取值,值为*int(a变量的内存地址)
fmt.Println("*b = ",*b) // 对*int取值,值为int(a的值)
fmt.Println("c = ",c) // **int类型的指针,指向*int(a变量的内存地址)
fmt.Println("*c = ",*c) // 对**int取值,值为*int(a变量的内存地址)
fmt.Println("&c = ",&c) // 取**int的内存地址
fmt.Println("*&c = ",*&c) // 对**int的内存地址取值
fmt.Println("**c = ",**c) // 对**int指向的内存地址的指针指向的值(a变量的内存地址)取值
fmt.Println("***&*&*&*&c = ",***&*&*&*&*&c)
fmt.Println("x = ",x) // 对*int指针指向的地址取值
}
//a = 1
//&a = 0xc42001a0d0
//*&a = 1
//b = 0xc42001a0d0
//&b = 0xc42000c028
//*&b = 0xc42001a0d0
//*b = 1
//c = 0xc42000c028
//*c = 0xc42001a0d0
//&c = 0xc42000c030
//*&c = 0xc42000c028
//**c = 1
//***&*&*&*&c = 1
//x = 1
指针变量前加"*"是对指针指向的地址取值,变量前加"&"是返回值的地址。
原文:https://www.cnblogs.com/sxzwj/p/8882673.html