• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
package main

import "fmt"

func main()  {
    var a int = 10
    //每个变量都有两层含义,变量的内存和变量的地址
    fmt.Printf("a = %d\n", a) //变量的内存 10
    fmt.Printf("a = %v\n", &a) //变量的地址 0xc042060080

    //保存某个变量的地址,需要指针类型, *int保存int的地址, **int保存*int的地址
    //声明(定义),定义只是特殊的声明
    //定义一个变量p,类型为*int
    var p *int
    p = &a
    fmt.Printf("p = %v, &a = %v\n", p, &a)
    *p = 666 //*p操作的不是p的内存,是p指向的内存(其实就是a)
    fmt.Printf("*p = %v, a = %v\n", *p, a)
}

执行结果为

GOROOT=C:\Go #gosetup
GOPATH=E:\go\develop #gosetup
C:\Go\bin\go.exe build -i -o C:\Users\baylor\AppData\Local\Temp\___go_build__go.exe E:/awesomeProject01/指针的基本操作.go #gosetup
"C:\Program Files\JetBrains\GoLand 2018.1.5\bin\runnerw.exe" C:\Users\baylor\AppData\Local\Temp\___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\n", p)

    *p = 666 //这个就是错误的,因为它没有正确的指向内存地址
    fmt.Printf("*p = %v\n", *p)
}

执行结果

GOROOT=C:\Go #gosetup
GOPATH=E:\go\develop #gosetup
C:\Go\bin\go.exe build -i -o C:\Users\baylor\AppData\Local\Temp\___go_build__go.exe E:/awesomeProject01/不要操作没有合法指向的内存.go #gosetup
"C:\Program Files\JetBrains\GoLand 2018.1.5\bin\runnerw.exe" C:\Users\baylor\AppData\Local\Temp\___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\n", *p)

执行结果 

p = <nil>
*p = 666

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Go语言之高级篇beego框架之请求数据处理发布时间:2022-07-10
下一篇:
Go语言标准库之context发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap