Rumah >pembangunan bahagian belakang >C++ >Mengapa Penunjuk Saya Tidak Berubah Selepas Menghantarnya ke Fungsi?

Mengapa Penunjuk Saya Tidak Berubah Selepas Menghantarnya ke Fungsi?

Patricia Arquette
Patricia Arquetteasal
2024-12-26 12:23:101083semak imbas

Why Doesn't My Pointer Change After Passing It to a Function?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn