首页 >后端开发 >Golang >指针调用方法的陷阱?

指针调用方法的陷阱?

WBOY
WBOY转载
2024-02-09 18:06:08558浏览

指针调用方法的陷阱?

在PHP编程中,指针是一种强大的工具,可以用来引用变量的内存地址,进而修改变量的值。然而,指针调用方法时可能会遇到一些陷阱和问题,需要我们谨慎处理。在本文中,php小编香蕉将详细介绍指针调用方法的陷阱,帮助开发者避免常见的错误和不必要的麻烦。无论你是初学者还是有一定经验的开发者,本文都会为你提供实用的指导和建议。让我们一起来探索指针调用方法的陷阱,提升我们的编程技能吧!

问题内容

我正在编写一个关于2-3-4树的实现。节点结构如下

type Node struct {
    items  []int
    childs []*Node
    parent *Node
}

我对下面的代码感到困惑。在我看来,这两部分正在做同样的事情。然而, 其中之一是错误的。

  • 正确的代码
cur = cur.parent
cur._insertNode(upTo, rn)
upTo, rn = cur._splitNode()
  • 代码错误
cur.parent._insertNode(upTo, rn)
upTo, rn = cur.parent._splitNode()
cur = cur.parent

谁能告诉我有什么区别吗?

我期望的是关于这个问题的解释。 这是 Go 指针方法的陷阱吗? 或者编译器错误?

解决方法

Ccur原来指向的节点,cur原来指向的节点,AC原来的父节点,假设对 _insertNodeAC原来的父节点,假设对 _insertNode 的调用会在 AC

之间插入一个新节点

B

;所以,我们从这里开始:

A
|
C

(加上其他节点,与我的观点无关):

A
|
B
|
C
_insertNode之前,C的父级是A;调用 _insertNode(加上其他节点,仍然与我的观点无关)。 需要注意的是,在调用_insertNode之前,C的父级是

A

;调用 _insertNode 后,

C

的父级为

B

🎜考虑到这一点,这是您的“正确代码”,以及解释其功能的注释:🎜
// initially, cur = C

// set cur = A:
cur = cur.parent

// insert B between A and C:
cur._insertNode(upTo, rn)

// cur is still A

// split A:
upTo, rn = cur._splitNode()
🎜这是你的“错误代码”,加上解释它在做什么的注释:🎜
// initially, cur = C

// insert B between A and C:
cur.parent._insertNode(upTo, rn)

// cur.parent is now B

// split B:
upTo, rn = cur.parent._splitNode()

// set cur = B:
cur = cur.parent
🎜你看到了吗?🎜

以上是指针调用方法的陷阱?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文转载于:stackoverflow.com。如有侵权,请联系admin@php.cn删除