25. Go 语言的指针

目录
文章目录隐藏
  1. 1. 指针的定义和使用
  2. 2. 指针作为函数的参数
  3. 3. 小结

本文主要介绍 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 的值。

执行结果:

Go 语言的指针

从以上输出结果可以看出,变量 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 语言的指针可以看作一个存储地址的特殊变量类型

「点点赞赏,手留余香」

0

给作者打赏,鼓励TA抓紧创作!

微信微信 支付宝支付宝

还没有人赞赏,快来当第一个赞赏的人吧!

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系maynote@foxmail.com处理
码云笔记 » 25. Go 语言的指针

发表回复