首页 > 服务端语言 > Go 入门教程 > 25 Go 语言的指针

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

1. 指针的定义和使用

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

代码示例

package main

import (
    "fmt"
)

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

执行结果

图片描述

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

2. 指针作为函数的参数

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

代码示例

package main

import (
    "fmt"
)

func main() {
    a := 10
    b := 20
    fmt.Println("交换前的a=", a, "b=", b)
    swap(&a, &b)
    fmt.Println("交换后的a=", a, "b=", b)
}

func swap(a, b *int) {
    *a, *b = *b, *a
}
  • 第 11 行:将变量 a 和 b 的地址作为函数 swap 指针参数的值传入函数;
  • 第 16 行:交换这两个指针保存的地址所保存的值。

执行结果

图片描述

3. 小结

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

  • Go 语言的指针 不可以做偏移
  • Go 语言的指针可以看作一个 存储地址的特殊变量类型
本文来自互联网用户投稿,不拥有所有权,该文观点仅代表作者本人,不代表本站立场。
访问者可将本网站提供的内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯本网站及相关权利人的合法权利。
本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站,邮箱:80764001@qq.com,予以删除。
© 2023 PV138 · 站点地图 · 免责声明 · 联系我们 · 问题反馈