指针做函数参数的一点疑惑?

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

demo1.go: ``` func swap01(x, y *int) { fmt.Printf("swap value a,b -- %p,%p -- %d,%d\n",x,y,*x,*y) *x, *y = *y, *x fmt.Printf("swap value a,b -- %p,%p -- %d,%d\n",x,y,*x,*y) } func main() { a:=10 b:=20 fmt.Printf("mian a,b -- %p,%p,%d -- %d\n",&a,&b,a,b) swap01(&a,&b) fmt.Printf("mian a,b -- %p,%p,%d -- %d\n",&a,&b,a,b) } swap01(&a,&b)输出: mian a,b -- 0xc000064080,0xc000064088,10 -- 20 swap value a,b -- 0xc000064080,0xc000064088 -- 10,20 swap value a,b -- 0xc000064080,0xc000064088 -- 20,10 mian a,b -- 0xc000064080,0xc000064088,20 -- 10 ``` demo2.go: ``` func swap02(x, y *int) { fmt.Printf("swap address a,b -- %p,%p -- %d,%d\n",x,y,*x,*y) x, y = y, x fmt.Printf("swap address a,b -- %p,%p -- %d,%d\n",x,y,*x,*y) } func main() { a:=10 b:=20 fmt.Printf("mian a,b -- %p,%p,%d -- %d\n",&a,&b,a,b) swap02(&a,&b) fmt.Printf("mian a,b -- %p,%p,%d -- %d\n",&a,&b,a,b) } swap02(&a,&b)输出: mian a,b -- 0xc000064080,0xc000064088,10 -- 20 swap address a,b -- 0xc000064080,0xc000064088 -- 10,20 swap address a,b -- 0xc000064088,0xc000064080 -- 20,10 mian a,b -- 0xc000064080,0xc000064088,10 -- 20 ``` 疑惑: swap01交换值,swap02交换了地址,为什么swap02的a,b值没有变?

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

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

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