基本用法
Go 中指针的基本用法与 C/C++ 相似。
func changeValue(p *int) { // 形参是个指针
*p = 10 // *p 代表指针 p 所指向的空间
}
func main() {
a := 1
changeValue(&a) // 用 & 取地址
}
多级指针
a := 1
var p *int = &a // 一级指针
var pp **int = &p // 二级指针
var ppp ***int = &pp // 三级指针
指向数组的指针
C/C++ 中数组名就是数组的首地址,可以直接赋值给指针。
但 Go 中仍然需要用&
取数组地址赋值给指针。
var arr [10]int
var arrPtr *[10]int = &arr // 这里和 C/C++ 不一样
指针数组
var ptrArr [10]*int
Go 与 C/C++ 指针的主要区别
C/C++ 中指针的功能很强大,可以进行转换、偏移、运算等,其实就是内存地址的运算,但也因此容易导致各种严重问题。
因此,Java、Python 中直接去除指针。
Go 语言没有去除指针,因为指针是高性能的一个关键特性。但 Go 语言对指针做了很多限制,没有了像 C/C++ 那样的各种指针操作,提高了安全性。