golang为什么引用传递的两个地址是不同的呢? ​

发布于 2021-11-24 21:51:57 字数 526 浏览 717 评论 1

@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技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

多彩岁月 2021-11-29 08:57:06

只要记住一点:go中函数调用的参数时传值的(和c语音、样一样)。

`t.test()`调用时,传入的 `t` 是地址;这个是语法糖,类似 `(&t).test()` 的便捷写法。

如果想在 test 方法中改变t,必须改变指针指向的值(不能只改变指针本身, 因为指针也是只传递):

`*t = t1`。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文