上面 p.i 这一行示例代码放代码里面会报错

panic: runtime error: invalid memory address or nil pointer dereference

讨论数量: 2
pardon110

尽信书,不如无书

4年前 评论
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
3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!