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
Lepaskan: 2024-12-26 12:23:10
asal
1017 orang telah melayarinya

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
}
Salin selepas log masuk

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
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan