分享
  1. 首页
  2. 主题
  3. Go问与答

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

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

`以下代码是将数组转换成链表,但是我不明白为什么循环里面对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

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

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)