相关疑难解决方法(0)

Golang:结构指针方法中的指针可以重新分配给另一个实例吗?

我一直在研究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)

methods tree pointers go

5
推荐指数
1
解决办法
3626
查看次数

指针指针(例如**int)有什么用例?

这是指针的指针

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)

你什么时候才能使用它?你可以正确地提出一些更容易做其他事情的事情,但这不是我所要求的.我真的想知道你会在哪个生产中使用它?

pointers go

1
推荐指数
1
解决办法
124
查看次数

标签 统计

go ×2

pointers ×2

methods ×1

tree ×1