• [GO]变量内存和变量地址


    package main
    
    import "fmt"
    
    func main()  {
        var a int = 10
        //每个变量都有两层含义,变量的内存和变量的地址
        fmt.Printf("a = %d
    ", a) //变量的内存 10
        fmt.Printf("a = %v
    ", &a) //变量的地址 0xc042060080
    
        //保存某个变量的地址,需要指针类型, *int保存int的地址, **int保存*int的地址
        //声明(定义),定义只是特殊的声明
        //定义一个变量p,类型为*int
        var p *int
        p = &a
        fmt.Printf("p = %v, &a = %v
    ", p, &a)
        *p = 666 //*p操作的不是p的内存,是p指向的内存(其实就是a)
        fmt.Printf("*p = %v, a = %v
    ", *p, a)
    }

    执行结果为

    GOROOT=C:Go #gosetup
    GOPATH=E:godevelop #gosetup
    C:Goingo.exe build -i -o C:UsersaylorAppDataLocalTemp\___go_build__go.exe E:/awesomeProject01/指针的基本操作.go #gosetup
    "C:Program FilesJetBrainsGoLand 2018.1.5in
    unnerw.exe" C:UsersaylorAppDataLocalTemp\___go_build__go.exe #gosetup
    a = 10
    a = 0xc042060080
    p = 0xc042060080, &a = 0xc042060080
    *p = 666, a = 666

     注意,永远不要操作没有合法指向的内存,比如:

    package main
    
    import "fmt"
    
    func main()  {
        var p *int
        p = nil
        fmt.Printf("p = %v
    ", p)
    
        *p = 666 //这个就是错误的,因为它没有正确的指向内存地址
        fmt.Printf("*p = %v
    ", *p)
    }

    执行结果

    GOROOT=C:Go #gosetup
    GOPATH=E:godevelop #gosetup
    C:Goingo.exe build -i -o C:UsersaylorAppDataLocalTemp\___go_build__go.exe E:/awesomeProject01/不要操作没有合法指向的内存.go #gosetup
    "C:Program FilesJetBrainsGoLand 2018.1.5in
    unnerw.exe" C:UsersaylorAppDataLocalTemp\___go_build__go.exe #gosetup
    p = <nil>
    panic: runtime error: invalid memory address or nil pointer dereference
    [signal 0xc0000005 code=0x1 addr=0x0 pc=0x48ce1c]
    
    goroutine 1 [running]:
    main.main()
        E:/awesomeProject01/不要操作没有合法指向的内存.go:10 +0x7c

     正确的写法应该是这样的

    var a int
    p = &a
    *p = 666
    fmt.Printf("*p = %v
    ", *p)

    执行结果 

    p = <nil>
    *p = 666
  • 相关阅读:
    kubectl exec 执行 容器命令
    centos下通过yum安装redis-cli
    windows下 使用ip地址反查主机名的命令
    O365(世纪互联)SharePoint 之文档库使用小记
    SharePoint 2016 图文安装教程
    SharePoint 2013 激活标题字段外的Menu菜单
    SharePoint 2013 定制搜索显示模板(二)
    SharePoint 2013 定制搜索显示模板
    SharePoint 2013 网站搜索规则的使用示例
    SharePoint 2013 搜索功能,列表项目不能完全被索引
  • 原文地址:https://www.cnblogs.com/baylorqu/p/9534548.html
Copyright © 2020-2023  润新知