在对普通变量使用"&"操作符取地址获得这个变量的指针后,可以对指针使用"*"操作,也就是指针取值,代码如下:


//准备一个字符串类型
var hourse = "Malibu"

//对字符串取地址,prt类型为*string
ptr := &hourse

//打印ptr的类型
fmt.Printf("ptr的类型为: %T \n", ptr)       //输出: ptr的类型为: *string

//打印ptr的指针地址
fmt.Printf("ptr的指针地址为: %p\n", ptr)     //输出: ptr的指针地址为: 0xc00008c090

//对指针进行取值操作
value := *ptr

//取值后的类型
fmt.Printf("ptr取值后的类型 %T \n", value)    //输出: ptr取值后的类型 string

//指针取值后就是指向变量的值
fmt.Printf("ptr的值是: %s \n", value)         //输出: ptr的值是: Malibu
 

取地址操作符 "&" 和取值操作符 "*" 是一对互补操作符, "&" 取出地址, "*" 根据地址取出地址指向的值。

变量、指针地址、指针变量、取地址、取值的互补关系和特性如下:

  • 对变量进行取地址 (&) 操作,可以获得这个变量的指针变量
  • 指针变量的值是指针地址
  • 对指针变量进行取值 (*) 操作,可以获得指针变量指向的原变量的值