1. 章节简介
- 结构体可以通过指针传递和操作,节省内存并可修改原始数据。
- 指针结构体常用于函数参数和方法接收者。
2. 知识点讲解
- 结构体指针声明
type Person struct {
Name string
Age int
}
p := &Person{"Alice", 20} // p 是 Person 的指针
- 访问指针结构体字段
p.Age = 21 // 自动解引用
fmt.Println(p.Name)
- 函数接收结构体指针
func Birthday(p *Person) {
p.Age++
}
-
区别
- 传值:函数内部修改不影响原结构体
- 传指针:函数内部修改会影响原结构体
3. 代码示例
package main
import "fmt"
type Person struct {
Name string
Age int
}
func Birthday(p *Person) {
p.Age++ // 修改原结构体
}
func main() {
alice := &Person{"Alice", 20}
fmt.Println("Before birthday:", alice.Age)
Birthday(alice)
fmt.Println("After birthday:", alice.Age) // 已修改
}
4. 练习任务
- 定义结构体
Student,包含Name、Score。 - 创建
Student指针变量,并写函数增加分数。 - 打印修改前后分数变化。
5. 小结
- 结构体指针可以直接修改原始数据。
- 函数传指针比传值更高效。
- 使用
p.Field自动解引用。