golang为什么引用传递的两个地址是不同的呢?
@chai2010 你好,想跟你请教个问题:
package main
import "fmt"
type Test struct { Id int } func main() { t := new(Test) fmt.Println(&t) t.test() fmt.Print(t.Id) } func (t *Test)test() { fmt.Println(&t) t1 := new(Test) t1.Id = 2 t = t1 }
为什么引用传递的两个地址是不同的呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
![扫码二维码加入Web技术交流群](/public/img/jiaqun_03.jpg)
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
只要记住一点:go中函数调用的参数时传值的(和c语音、样一样)。
`t.test()`调用时,传入的 `t` 是地址;这个是语法糖,类似 `(&t).test()` 的便捷写法。
如果想在 test 方法中改变t,必须改变指针指向的值(不能只改变指针本身, 因为指针也是只传递):
`*t = t1`。