Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Perangkap kaedah panggilan dengan penunjuk?

Perangkap kaedah panggilan dengan penunjuk?

WBOY
WBOYke hadapan
2024-02-09 18:06:08535semak imbas

Perangkap kaedah panggilan dengan penunjuk?

Dalam pengaturcaraan PHP, penunjuk ialah alat berkuasa yang boleh digunakan untuk merujuk alamat memori pembolehubah dan kemudian mengubah suai nilai pembolehubah. Walau bagaimanapun, mungkin terdapat beberapa perangkap dan masalah apabila memanggil kaedah dengan penunjuk, yang perlu ditangani dengan berhati-hati. Dalam artikel ini, editor PHP Banana akan memperkenalkan secara terperinci perangkap kaedah panggilan penunjuk untuk membantu pembangun mengelakkan kesilapan biasa dan masalah yang tidak perlu. Sama ada anda seorang pemula atau pembangun berpengalaman, artikel ini akan memberi anda bimbingan dan nasihat praktikal. Mari terokai kelemahan kaedah panggilan penunjuk dan tingkatkan kemahiran pengaturcaraan kami!

Kandungan soalan

Saya sedang menulis pelaksanaan tentang 2-3-4 pokok. Struktur nod adalah seperti berikut

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

Saya keliru dengan kod di bawah. Nampaknya kedua-dua bahagian ini melakukan perkara yang sama. Walau bagaimanapun, Salah satunya salah.

  • Kod yang betul
cur = cur.parent
cur._insertNode(upTo, rn)
upTo, rn = cur._splitNode()
  • Ralat kod
cur.parent._insertNode(upTo, rn)
upTo, rn = cur.parent._splitNode()
cur = cur.parent

Boleh sesiapa beritahu saya apa perbezaannya?

Apa yang saya jangkakan ialah penjelasan mengenai isu ini. Adakah ini perangkap kaedah penunjuk Go? Atau ralat pengkompil?

Penyelesaian

Andaikan C ialah nod yang cur pada asalnya ditunjuk, cur原来指向的节点,AC原来的父节点,假设对 _insertNodeA ialah nod induk asal C, dengan anggapan bahawa panggilan ke _insertNode akan berada dalam Sisipkan nod baharu B antara A

dan

C

jadi, kita mulakan di sini:

A
|
C

(ditambah nod lain, tidak berkaitan dengan pandangan saya):

A
|
B
|
C
_insertNode之前,C的父级是A;调用 _insertNode (ditambah nod lain, masih tidak relevan dengan pandangan saya). Perlu diambil perhatian bahawa sebelum memanggil _insertNode, induk C ialah

A

; selepas memanggil _insertNode, induk

C

ialah

B

.

🎜Dengan mengambil kira perkara itu, inilah "kod yang betul" anda, bersama-sama dengan ulasan yang menerangkan perkara yang dilakukan: 🎜
// 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()
🎜Berikut ialah "kod ralat" anda, serta ulasan yang menerangkan perkara yang dilakukannya: 🎜
// 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
🎜Adakah anda melihatnya? 🎜

Atas ialah kandungan terperinci Perangkap kaedah panggilan dengan penunjuk?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam