我一直在研究Golang并且已经实现了一些数据结构来学习语言的工作原理.我在编写AVL树的代码时遇到了以下问题:
从结构指针方法分配主指针似乎在函数范围之外没有任何影响.例如tree.rotateLeftToRoot(),不会导致tree.left成为新树.
问题:有没有办法在Golang中的结构指针方法中重新指定指针,或者这通常是不鼓励的?在示例中,这将是"tree = prevLeft"行.
代码段:
//Graphical representation of t.rotateLeftToRoot():
// t L
// L R -> LL t
//LL LR LR R
func (tree *AvlTree) rotateLeftToRoot() {
if tree == nil {
return
}
prevLeft := tree.left
if prevLeft != nil {
tree.left = prevLeft.right //tree.left passed root its right branch
prevLeft.right = tree //tree becomes tree.left's right branch
tree.updateHeight()
prevLeft.updateHeight()
tree = prevLeft //desired behaviour: tree.left becomes the new tree
//actual …Run Code Online (Sandbox Code Playgroud) 这是指针的指针
package main
import "fmt"
func main() {
var num int
fmt.Println(&num) // 0x...0
makePointer(&num)
}
func makePointer(firstPointer *int) {
fmt.Println(firstPointer) // 0x...0
fmt.Println(&firstPointer) // 0x...1
makePointerToAPointer(&firstPointer)
}
func makePointerToAPointer(secondPointer **int) {
fmt.Println(secondPointer) // 0x...1
fmt.Println(&secondPointer) // 0x...2
}
Run Code Online (Sandbox Code Playgroud)
你什么时候才能使用它?你可以正确地提出一些更容易做其他事情的事情,但这不是我所要求的.我真的想知道你会在哪个生产中使用它?