为什么用指针取得的值是一样的呢?

Schr0dingerCat · · 1399 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

为什么使用值传入,输出的是正确的,但使用指针传入,再取值,获得的值却是一样的呢???? ```go package main import ( "fmt" "time" ) func tggg(p *int) { fmt.Printf("p = %p, v = %d\n", p, *p) } func tggg1(t int) { fmt.Printf("v = %d\n", t) } func main() { number := []int{1, 2, 3, 4, 5} for _, v := range number { go tggg1(v) go tggg(&v) } time.Sleep(5*time.Second) } ``` 输出结果: ``` v = 1 p = 0xc000084010, v = 5 v = 2 p = 0xc000084010, v = 5 v = 3 p = 0xc000084010, v = 5 v = 4 p = 0xc000084010, v = 5 v = 5 p = 0xc000084010, v = 5 ``` ---------------------------------------时间线--------------------------- 我有加了个sleep 输出就不一样了,怎么感觉从地址里取值有延时啊 ```go package main import ( "fmt" "time" ) func tggg(p *int) { fmt.Printf("p = %p, v = %d\n", p, *p) } func tggg1(t int) { fmt.Printf("v = %d\n", t) } func main() { number := []int{1, 2, 3, 4, 5} for k, v := range number { // go tggg1(v) switch k { case 0: time.Sleep(1*time.Second) go tggg(&v) case 1: time.Sleep(2*time.Second) go tggg(&v) case 2: time.Sleep(3*time.Second) go tggg(&v) case 3: time.Sleep(4*time.Second) go tggg(&v) case 4: time.Sleep(5*time.Second) go tggg(&v) } // go tggg(&v) } time.Sleep(5*time.Second) } ``` 输出结果: ``` = 0xc000084010, v = 2 p = 0xc000084010, v = 3 p = 0xc000084010, v = 4 p = 0xc000084010, v = 5 p = 0xc000084010, v = 5 ``` 但是为啥没有1 ,却有两个5呢?????

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1399 次点击  ∙  1 赞  
加入收藏 微博
16 回复  |  直到 2019-09-26 09:01:50
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传