基本用法

Go 中指针的基本用法与 C/C++ 相似。

  1. func changeValue(p *int) { // 形参是个指针
  2. *p = 10 // *p 代表指针 p 所指向的空间
  3. }
  4. func main() {
  5. a := 1
  6. changeValue(&a) // 用 & 取地址
  7. }

多级指针

  1. a := 1
  2. var p *int = &a // 一级指针
  3. var pp **int = &p // 二级指针
  4. var ppp ***int = &pp // 三级指针

指向数组的指针

C/C++ 中数组名就是数组的首地址,可以直接赋值给指针。
但 Go 中仍然需要用&取数组地址赋值给指针。

  1. var arr [10]int
  2. var arrPtr *[10]int = &arr // 这里和 C/C++ 不一样

指针数组

  1. var ptrArr [10]*int

Go 与 C/C++ 指针的主要区别

C/C++ 中指针的功能很强大,可以进行转换、偏移、运算等,其实就是内存地址的运算,但也因此容易导致各种严重问题。

因此,Java、Python 中直接去除指针。

Go 语言没有去除指针,因为指针是高性能的一个关键特性。但 Go 语言对指针做了很多限制,没有了像 C/C++ 那样的各种指针操作,提高了安全性。