`以下代码是将数组转换成链表,但是我不明白为什么循环里面对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的`
有疑问加站长微信联系(非本文作者)
