Go 语言指针学习笔记

概述

在 Go 中,指针是一种非常重要的数据类型,它也是实现一些高级特性的必备工具。指针通常被用来在函数之间传递数据或者在代码中共享数据。本文将介绍指针的基本概念,以及如何在 Go 中使用指针。

基本概念

指针是一个变量,它存储了另一个变量的地址。在 Go 中,我们使用 * 符号来声明一个指针,例如:

goCopy Code
var ptr *int

这里我们声明了一个名为 ptr 的指针,它指向了一个整型变量。我们可以通过取地址符 & 来获取变量的地址:

goCopy Code
var num int = 10 ptr := &num fmt.Println("num 的地址是:", ptr)

使用指针

使用指针的主要目的是共享变量。如果我们想要在一个函数中修改一个变量,并且希望这个变量的值在其他函数中也能被修改,那么我们就需要使用指针。下面是一个例子:

goCopy Code
func main() { var num int = 10 fmt.Println("原始值:", num) changeNum(&num) fmt.Println("修改后的值:", num) } func changeNum(ptr *int) { *ptr = 20 }

在这个例子中,我们定义了一个 changeNum 函数,并使用指针作为参数。在 main 函数中,我们创建了一个整型变量 num 并将它的地址传递给 changeNum 函数。changeNum 函数通过解引用指针来修改变量的值,这样 main 函数中的 num 变量也会被修改。

实例

下面是一个更具体的例子,展示了如何使用指针来交换两个变量的值:

goCopy Code
func main() { var a, b int = 1, 2 fmt.Println("交换前:a =", a, ", b =", b) swap(&a, &b) fmt.Println("交换后:a =", a, ", b =", b) } func swap(x *int, y *int) { temp := *x *x = *y *y = temp }

在这个例子中,我们定义了一个 swap 函数,并使用指针作为参数。在 main 函数中,我们创建了两个整型变量 ab,并将它们的地址分别传递给 swap 函数。swap 函数通过解引用指针来交换变量的值,这样 main 函数中的 ab 变量也会被交换。

结论

指针是一种非常重要的数据类型,它可以帮助我们在不同函数之间共享变量。在使用指针时,需要注意解引用指针和获取指针地址的方式。在实际编程中,指针常被用来实现高级特性,例如动态数据结构和接口。