本章中,我们介绍一下Go语言中的指针。 Go语言中也有指针,但是大家不要怕,Go语言的指针很简单,不会像C++指针那么复杂。
Go没有指针运算,指针是编程语言中的对象,它的值通常指向(point to)计算机内存中另一个值的地址。
当我们定义x
为int值,我们可以定义x=1
。为了知道x
的内存地址,我们可以使用&x
,也就是定义了一个指针。
用如下代码测试一下:
package main
import "fmt"
func main() {
var a int
a = 10
fmt.Println(a) // 打印a的值
fmt.Println(&a) // 打印a的地址
}
10
0xc00000a0c8
我们可以看到x
的值为10,其内存地址为0xc00000a0c8
。内存地址可以用&
取地址符来检索。
我们可以用*
来定义指针类型,例如 var a *int
,然后使用*a = 值
的方式来设定指针的值;使用x=内存地址
来设置内存地址。使用如下代码测试一下:
package main
import "fmt"
func main() {
var a int
a = 10
fmt.Println(a) // 打印a的值
fmt.Println(&a) // 打印a的地址
// 定义指针
var num *int
val := new(int)
num = new(int)
*num = a // 设置值
val = &a // 设置地址
fmt.Println("*****指针 num*****")
fmt.Println(*num) // 打印指针值
fmt.Println(num) // 打印指针地址
fmt.Println("*****指针 val*****")
fmt.Println(*val) // 打印指针值
fmt.Println(val) // 打印指针地址
}
10
0xc00000a0c8
*****指针 num*****
10
0xc00000a118
*****指针 val*****
10
0xc00000a0c8
Go语言只有值传递一种方式