Go 语言的指针

本文主要介绍 Go 语言中的指针。Go 语言中和 C/C++ 一样,直接提供了指针类型,但是不同的是 Go 语言的指针并没有那么高深莫测,因为它是无法进行位移和运算的,它只是一个存储了其它变量地址的变量而已。它在 Go 语言中最大的作用就是在值传递的过程中减少内存消耗,毕竟一个地址的存储开销是十分少的。

 

1.指针的定义和使用

在 Go 语言中指针类型的声明和 C/C++ 类似,都是采用*符号来区分正常类型变量和指针变量。

代码示例

代码块
  • package main
  • 2
  • import (
  • 4          "fmt"
  • )
  • 6
  • func main() {
  • 8          str := "Hello World !"
  • 9          var strP *string
  • 10        strP = &str
  • 11        *strP = "Hello Codey !"
  • 12        fmt.Println("指针strP的地址为", strP)
  • 13        fmt.Println("指针strP指向的值为", *strP)
  • 14        fmt.Println("指针str的地址为", &str)
  • 15        fmt.Println("指针str的值为", str)
  • 16  }
  • 第 9 行:使用*+变量类型的形式声明一个string类型的指针。
  • 第 10 行:将指针 strP 指向变量 str,也就是将变量 str 的地址赋值给指针变量 strP 。&为取地址符,可以取出变量所在的地址。
  • 第 11 行:通过指针修改 str 的值。

执行结果

图片描述

从以上输出结果可以看出,变量 strP 存储的值就是变量 str 的地址,可以通过使用 *strP 操作符改变其存储的地址所存储的值

 

2. 指针作为函数的参数

Go 语言中只有值传递,没有引用传递,因为引用传递设计之初是为了解决函数想要有多个返回值的问题,但是 Go 语言的函数自带多返回值的返回方式。所以想要指针作为参数传入函数中,只能传递地址进入函数进行修改,并不能直接引用指针参数,这一特点就大大降低了Go语言指针的使用难度。

代码示例

代码块
  • package main
  • 2
  • import (
  • 4          "fmt"
  • )
  • 6
  • func main() {
  • 8          a := 10
  • 9          b := 20
  • 10        fmt.Println("交换前的a=", a, "b=", b)
  • 11        swap(&a, &b)
  • 12        fmt.Println("交换后的a=", a, "b=", b)
  • 13  }
  • 14
  • 15  func swap(a, b *int) {
  • 16        *a, *b = *b, *a
  • 17  }
  • 第 11 行:将变量a和b的地址作为函数swap指针参数的值传入函数;
  • 第 16 行:交换这两个指针保存的地址所保存的值。

执行结果

图片描述

 

3. 小结

本文主要讲解了Go语言中指针的使用,以下为注意事项:

  • Go 语言的指针不可以做偏移
  • Go 语言的指针可以看作一个存储地址的特殊变量类型

文章来源于网络,侵删!

相关新闻