【golang数组转链表】请问谁能指点下,这种嵌套struct的赋值原理呢

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

`以下代码是将数组转换成链表,但是我不明白为什么循环里面对temp这个中间变量的赋值会影响到res,我打印发现二者的地址是不同的,所以不存在引用啊,但实际结果是temp的赋值对res产生了影响,得到了正确的链表即res` ``` package main import ( "fmt" ) // 链表基本结构 type ListNode struct { Val int Next *ListNode } // 数组转链表 func makeListNode(elements []int) *ListNode { if len(elements) == 0 { return nil } res := &ListNode{ Val: elements[0], } // temp对res复制,二者没有关系了 temp := res for i := 1; i < len(elements); i++ { // 对temp的子属性赋值 temp.Next = &ListNode{Val: elements[i]} // 再将temp指向当前子属性 作为下一轮循环的当前值 temp = temp.Next } fmt.Println(temp) // &{5 <nil>} fmt.Println(res) // &{2 0xc0000a0030} fmt.Println(&temp) // 0xc000090018 fmt.Println(&res) // 0xc000090010 return res } func main() { a := []int{2, 4, 5} // 调用 b := makeListNode(a) // 但实际结果是temp的赋值对res产生了影响,得到了正确的链表 fmt.Println(b) // &{2 0xc000094040} } ``` `请问是否有工具可以看到这整个赋值的过程呢?temp的修改是如何影响到res的`

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

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

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