首頁 > 後端開發 > Golang > 主體

指標呼叫方法的陷阱?

WBOY
發布: 2024-02-09 18:06:08
轉載
533 人瀏覽過

指標呼叫方法的陷阱?

在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原來指向的節點,AC原來的父節點,假設對_insertNode 的呼叫會在AC 之間插入一個新節點B;所以,我們從這裡開始:

A
|
C
登入後複製

(加上其他節點,與我的觀點無關):

A
|
B
|
C
登入後複製

(加上其他節點,仍然與我的觀點無關)。

要注意的是,在呼叫_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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!