Go语言的取地址符是&,放到一个变量前使用就会返回相应变量的内存地址。
以下实例演示了变量在内存中的地址:

  1. package main
  2. import "fmt"
  3. func main() {
  4. var a int = 10
  5. fmt.Printf("变量的地址: %x\n", &a )
  6. }

指针

一个指针变量可以指定任何一个值的内存地址它指向那个值的内存地址。
类似于变量和常量,在使用指针前需要声明指针。指针声明格式如下:

  1. var var_name *var-type

var-type为指针类型,var_name为指针变量名,*号用于指定变量是作为一个指针。以下是有效的指针声明:

  1. var ip *int /* 指向整型*/
  2. var fp *float32 /* 指向浮点型 */

指针的使用

指针的使用流程:

  • 定义指针变量;

  • 为指针变量赋值;

  • 访问指针变量中指向地址的值。

  • 在指针类型前面加上*号来获取指针所指向的内容。

  1. package main
  2. import "fmt"
  3. func main() {
  4. var a int= 20 /* 声明实际变量 */
  5. var ip *int /* 声明指针变量 */
  6. ip = &a /* 指针变量的存储地址 */
  7. fmt.Printf("a 变量的地址是: %x\n", &a )
  8. /* 指针变量的存储地址 */
  9. fmt.Printf("ip 变量的存储地址: %x\n", ip )
  10. /* 使用指针访问值 */
  11. fmt.Printf("*ip 变量的值: %d\n", *ip )
  12. }

Go 空指针

当一个指针被定义后没有分配任何变量时,它的值为nil。
nil指针也称为空指针。
nil在概念上和其他语言的null、None、nil、NULL一样,都指向零值或空值。
一个指针变量通常缩写为ptr。

  1. package main
  2. import "fmt"
  3. func main() {
  4. var ptr *int
  5. fmt.Printf("ptr 的值为 : %x\n", ptr )
  6. }

空指针判断:

  1. if(ptr != nil) /* ptr 不是空指针 */
  2. if(ptr == nil) /* ptr 是空指针 */

Golang 指针 - 图1