Rumah >pembangunan bahagian belakang >Golang >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!
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.
cur = cur.parent cur._insertNode(upTo, rn) upTo, rn = cur._splitNode()
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?
Andaikan C ialah nod yang cur
pada asalnya ditunjuk, cur
原来指向的节点,A为C原来的父节点,假设对 _insertNode
A ialah nod induk asal C, dengan anggapan bahawa panggilan ke _insertNode
akan berada dalam Sisipkan nod baharu B antara A
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
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!