指针
指针,是一个比较高级的概念。
我们之前接触了变量,知道变量是代表了一个东西。但是,变量存储在什么地方呢?在编程的世界里,一切东西都是存储在计算机的内存中的。那既然变量是存储在内存中,那自然是有一个地址来让我们可以在内存中访问到这个变量的。这个地址,即为指针。
也就是说,指针保存的是变量的内存地址。
想要创建一个指针我们可以这样做:
使用 *T
创建一个指向类型 T
的值的指针。
// 创建一个指向类型 int 的值的指针 p。其零值是 `nil`。
var p *int
或者使用 &
符号会生成一个指向其作用对象的指针。
var i int = 1
var p = &i // 指针 p 指向其作用对象变量 i。
创建了指针之后,应该怎么使用它呢?答案是通过使用 *
啦:
fmt.Println(*p) // 通过指针 p 读取 i
*p = 2 // 通过指针 p 设置 i,此时,变量 i 的值就变成 2 啦
通过指针,我们可以直接修改原始作用对象的值。
我们来看一个比较复杂的例子:
package main
import "fmt"
func main() {
i, j := 42, 27
p := &i // 指针 p 指向变量 i
fmt.Println(*p) // 通过指针 p 读取变量 i 的值。=> 42
*p = 21 // 通过指针 p 设置变量 i 的值
fmt.Println(i) // => 21
p = &j // 将指针 p 修改为指向变量 j
*p = *p + 3 // 通过指针 p 访问并修改变量 j
fmt.Println(j) // => 30
}
我们会在稍后的章节中继续学习指针的使用场景。