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