go的指针在方法里修改了内存地址,可是外部依然无效呢?

ciel · 2021-03-21 11:50:53 · 3772 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2021-03-21 11:50:53 的主题,其中的信息可能已经有所发展或是发生改变。

func main(){

a := 64
var i *int = &a

increment(i)
fmt.Println(*i)  //指针类型且已修改指针地址,为什么依然是64

}

func increment(i *int){

t := *i
t++
i = &t

fmt.Println(*i)

}


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

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

3772 次点击  ∙  1 赞  
加入收藏 微博
5 回复  |  直到 2021-03-23 17:17:41
focusonline
focusonline · #1 · 4年之前

楼主怕是C语言中毒比较深或者基础还需要加强, 你应该明白指针和指向指针的指针是不一样的...

937624219
937624219 · #2 · 4年之前

increment方法是参数复制的一个指向a的地址,然后你把复制的地址再另外赋值一个地址,但是a的地址是没有变化的 初学者的理解

jthmath
jthmath · #3 · 4年之前

修改形参的值不会影响实参

katsu
katsu · #4 · 4年之前

increment函数里的i = &t改成*i = t.

alan999cy
alan999cy · #5 · 4年之前

go函数调用时,指针类型是赋值拷贝,也就是说在increment函数里面的i变量只是原来的指针变量的一个副本,改变指针变量的值并不会影响原来的地址,如果像楼上改成修改指针变量指向的值,则指针指向的内容会改变

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传