讨论数量:
type myStruct struct {
i int
}
// v 是结构体类型变量
var v myStruct
// p 是指向一个结构体类型变量的指针
var p *myStruct // 初始化指针的时候会为指针 p 的值赋为 nil
fmt.Println(v) // {0}
fmt.Println(p) // <nil>
// v.i = 1
// p.i = 1 // 在这里进行赋值,go会报错 invalid memory address or nil pointer dereference
// 因为p代表的是 *p 的地址
// nil 的话系统还并没有给 *p 分配地址, 给p 赋值肯定会出错
// [解决办法]: 指针赋值前可以先创建一块内存分配给赋值对象
p = new(myStruct)
v.i = 1
p.i = 2 // 这样就不会报错了
fmt.Println(v) // {1}
fmt.Println(p) // &{2}
fmt.Println(&p) // p的地址 0xc000006030
推荐文章: