美文网首页
Go语言指针

Go语言指针

作者: AuglyXu | 来源:发表于2018-09-27 16:01 被阅读0次

    只讲述和C语言地址的不同

    • 格式:
      var 指针名称 *数据类型
      var 指针名称 *数据类型 = 地址

    指向数组的指针

    • 注意点: arr 和 &arr 和 &arr[0]不一样
      • &arr的类型是*[3]int

      • &arr[0]的类型是*int

      • Go语言中数据类型不同不能赋值

    var arr [3]int = [3]int{1,3,5}
    var p *[3]int = &arr
    //用地址操作数组
    //arr[0] = 666
    (*p)[0] = 666
    

    指向切片的指针

    • 有var sce []int = []int{1, 3, 5}
    • 注意点:
      1.切片的本质是一个结构体,结构体中的指针指向了底层的数组
      2.直接打印sce的地址,打印的是结构体保存的底层数组的地址([]int)
      3.打印&sce得到的才是结构体自己的地址,也就是切片的地址(*[]int)
    var sce []int = []int{1, 3, 5}
    var p *[]int = &sce
    //操作切片的数据
    (*p)[0] = 666
    

    指向字典的指针

    • 和普通指针一样, 只能通过(*p)[key]来操作字典
    var dict map[string]string = map[string]string{"name":"lnj","age":"18"}
    var p *map[string]string = &dict
    (*p)["name"] = "zs"
    fmt.Println(dict)//{"name":"zs","age":"18"}
    

    指向结构体的指针

    • 指向结构体的指针和C语言指向结构体的指针类似,可以通过p.name或者(*p).name来操作指针
        type Person struct {
            name string
            age int
        }
        var per Person = Person{"lnj", 18}
        var p *Person
        p = &per
        //(*p).name = "zs"
        p.name = "zs"
        fmt.Println(per)
    

    指针作为返回值

    • 指针作为函数的参数和C语言一样, 修改形参会影响实参
    • 指针作为函数的返回值, 如果指针指向的是一个局部变量, 那么不建议返回.因为当函数调用完毕局部变量就释放了

    相关文章

      网友评论

          本文标题:Go语言指针

          本文链接:https://www.haomeiwen.com/subject/lupeoftx.html