第08讲 Go指针说明
本讲义根据视频实际讲解内容整理
一、本讲概述
本讲从内存存储的角度引入指针概念,讲解了指针的本质——"一个指针的值是另一个变量的地址"。通过代码演示了取地址(&)、解引用(*)操作,以及通过指针修改原始变量值的过程。
二、指针的核心概念
2.1 变量与内存
老师强调:变量存储在内存中。每个普通变量在内存中都有一个对应的存储空间,绑定到一个变量名(如 x)。
2.2 什么是指针
"一个指针的值是另一个变量的地址。"
- 指针变量存储的不是普通的数据值,而是另一个变量在内存中的地址
- 通过指针,可以间接访问和修改对应地址上的数据
2.3 为什么要用指针
老师用一个形象的比喻来解释指针的价值:
- 如果多个地方需要共享同一份数据,不用指针的话,每次都要在内存中开辟新的空间拷贝数据
- 使用指针后,多个变量可以指向同一个内存地址,修改一处,所有引用处都能看到变化
- 这就像"同一个地址",大家共享同一份数据
三、指针的基本操作
3.1 取地址运算符 &
Go
package main
import "fmt"
func main() {
var x int = 1
var p *int = &x // p 存储的是 x 的内存地址
fmt.Println(p) // 输出类似 0xc00001a0b0(16进制地址)
}
&x表示取变量x的内存地址p是一个指向int类型的指针变量- 打印
p时,输出的是一串以0x开头的十六进制地址
3.2 解引用运算符 *
Go
fmt.Println(*p) // 输出 1,即 x 的值
*p表示取出指针p所指向地址上存储的值- 老师强调:"解引用取地址对应的值"
3.3 通过指针修改值
Go
package main
import "fmt"
func main() {
var x int = 1
var p *int = &x
fmt.Println("x =", x) // x = 1
fmt.Println("p指向的值 =", *p) // 1
*p = 2 // 通过指针修改地址上的值
fmt.Println("修改后 x =", x) // x = 2
}
老师演示了关键操作:
p = &x:让指针p指向x的内存地址*p = 2:通过指针修改该地址上的值- 最终
x的值变成了2
"通过指针修改地址上的值,x 的值最终也变了。"
四、指针要点总结
| 概念 | 符号 | 说明 |
|---|---|---|
| 取地址 | &x |
获取变量 x 的内存地址 |
| 解引用 | *p |
获取指针 p 指向地址上的值 |
| 指针赋值 | p = &x |
让指针 p 指向 x |
| 通过指针修改 | *p = 2 |
修改 p 指向地址上的值 |
核心理解
- 指针保存的是地址,不是具体的值
- 地址不变,值可变:改变指针指向的值,原变量的值也会改变
- 共享内存:多个指针可以指向同一个地址,实现数据共享
- 打印指针时看到的是
0x开头的十六进制地址
五、小结
本讲通过实际代码演示了 Go 语言指针的基本用法。指针的核心是"保存变量的内存地址",通过 & 取地址、* 解引用,可以实现间接访问和修改数据。老师提到指针虽然不算太复杂,但需要理解内存地址的概念,后续讲解会进一步深入。