goland 记"*"与"&"的使用
首先引用一段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
指针变量前加"*"是对指针指向的地址取值,变量前加"&"是返回值的地址。