指针就是地址
%p,地址占位符。
&value 对值取地址。
*ptr 对地址取值。
例
func main() {
//声明变量a,系统会开辟一片内存(地址),里面存的值是123
var a int = 123
fmt.Printf("a的类型是%T\n", a)
fmt.Printf("a的值是%d\n", a)
fmt.Printf("a的地址是%p\n", &a)
var aPtr = &a
//aPtr的类型是int型指针
fmt.Printf("aPtr的类型是%T\n",aPtr)
fmt.Println(*aPtr)
//修改aPtr地址指向的值
*aPtr = 456
fmt.Println(*aPtr)
fmt.Println(a)
}
执行结果
指针的类型不可更改
*aPtr = 456
fmt.Println(*aPtr)
fmt.Println(a)
//aPtr指向的值是int,不能讲int外的数据类型赋值给aPtr
var x = "你好"
//会报编译错误
*aPtr = x
指向指针的指针(二级指针)
func main() { //将x的地址赋值给mPtr var x = 123 var mPtr *int = &x //将mPtr变量的地址赋值给MmPtr MmPtr := &mPtr fmt.Println(MmPtr) //打印MmPtr的类型。 fmt.Printf("MmPtr的类型是%T", MmPtr) // 打印x的值 fmt.Println(*mPtr) fmt.Println(*(*MmPtr)) fmt.Println(**MmPtr) }
执行结果
原文:https://www.cnblogs.com/paad/p/11028358.html