Memahami Isu: Hantaran Penunjuk Tidak Diubahsuai
Dalam coretan kod ini, fungsi clickOnBubble menerima penunjuk ke objek Bubble (target Bubble) dan vektor penunjuk Buih (buih). Isunya ialah selepas fungsi itu dilaksanakan, penunjuk targetBubble yang dihantar ke fungsi itu kekal tidak diubah suai. Jangkaan ialah fungsi itu harus menukar penunjuk targetBubble untuk menunjuk ke Bubble tertentu dalam vektor gelembung, tetapi ini tidak berlaku.
Meluluskan Salinan Penunjuk
Sebab bagi tingkah laku ini ialah anda menghantar salinan penunjuk targetBubble, bukan rujukan. Apabila anda menghantar salinan penuding, sebarang perubahan yang dibuat pada penuding dalam fungsi tidak akan ditunjukkan dalam penuding asal di luar fungsi.
Penyelesaian: Menggunakan Rujukan Penunjuk atau Penunjuk kepada Penunjuk
Untuk memastikan bahawa penunjuk targetBubble di luar fungsi ditukar, anda perlu menghantar rujukan kepada penunjuk atau menggunakan penunjuk ke penunjuk.
Menggunakan Rujukan Penunjuk:
void clickOnBubble(sf::Vector2i &mousePos, std::vector<Bubble *>& bubbles, Bubble *&targetBubble) { targetBubble = bubbles[i]; // Modified pointer here is reflected outside function }
Menggunakan Penunjuk ke Penunjuk:
void clickOnBubble(sf::Vector2i &mousePos, std::vector<Bubble *>& bubbles, Bubble **targetBubble) { *targetBubble = bubbles[i]; // Modified pointer here is reflected outside function }
Dalam kedua-dua kes, penunjuk targetBubble yang diubah suai dalam fungsi akan ditunjukkan dalam penunjuk targetBubble asal di luar fungsi.
Atas ialah kandungan terperinci Mengapa Penunjuk Saya Tidak Berubah Selepas Menghantarnya ke Fungsi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!