3 回答
TA贡献1906条经验 获得超10个赞
current两者i3都是指针。
current:= i3
复制指针意味着现在current将指向指向的相同地址i3。
指针的副本与它的复制没有任何关系,只是两者都指向相同的值。所以修改current对i3.
你可以用这种方式做到这一点
current := &i3
for (*current).next != nil {
*current = (*current).next
}
现在current是一个指针i3,现在如果改变当前指向的值会影响i3。
TA贡献1842条经验 获得超22个赞
在您的第一个示例中,短变量声明:
current := i3
创建一个名为current指针类型的新变量。它是一个不同于 的变量i3,但它具有相同的指针值。
循环仅修改(分配给)current变量,因此存储在其中的指针i3永远不会改变。所以在循环之后i3仍然指向带有 的节点data = 3,并且current将是最后一个,即带有data = 1。
在第二个示例中,您没有创建current变量,而是修改(分配给)i3变量。所以在循环之后它将指向最后一个节点data = 1。在这两种情况下,节点对象都不会被修改,只是currentori3变量。
TA贡献1848条经验 获得超2个赞
在第一个示例中,您创建了一个指针,该指针current将具有与所具有的值相同的值i3(结构的地址Node{data: 3, next: i2})。
当你在 for 循环中执行current = current.next语句时,你只改变了指针的值,而不是地址后面的值。您只需替换指针中存储的地址。
如果您遵循迭代:
0., current -> Node{data: 3, next: i2}
1., current -> Node{data: 2, next: i}
2., current -> Node{data: 1}
其他指针将保持不变。
i -> Node{data: 1}
i2 -> Node{data: 2, next: i}
i3 -> Node{data: 3, next: i2}
在第二种情况下,您执行相同的操作,但是current现在您更改了存储在指针中的地址,而不是i3指针。如果您遵循迭代:
0., i3 -> Node{data: 3, next: i2}
1., i3 -> Node{data: 2, next: i}
2., i3 -> Node{data: 1}
其他指针将保持不变。
i -> Node{data: 1}
i2 -> Node{data: 2, next: i}
当然,您将在内存中的某处有一个对象而无法访问它(Node {data:3,next:i2})
- 3 回答
- 0 关注
- 147 浏览
添加回答
举报
