Rumah > pembangunan bahagian belakang > C++ > Mengapa Mengubah Penunjuk dalam Fungsi C Tidak Mengubah Penunjuk Asal?

Mengapa Mengubah Penunjuk dalam Fungsi C Tidak Mengubah Penunjuk Asal?

Linda Hamilton
Lepaskan: 2024-12-27 07:17:09
asal
263 orang telah melayarinya

Why Doesn't Modifying a Pointer in a C   Function Change the Original Pointer?

Fungsi Tidak Mengubah Penunjuk Lulus dalam C

Dalam C , kekeliruan timbul apabila cuba mengubah suai penunjuk yang dihantar kepada fungsi. Isunya terletak pada sifat bawaan petunjuk. Apabila fungsi menerima penuding sebagai hujah, ia sebenarnya beroperasi pada salinan penuding itu, bukan penuding asal itu sendiri.

Pertimbangkan contoh fungsi clickOnBubble:

bool clickOnBubble(sf::Vector2i &mousePos, std::vector<Bubble *>& bubbles, Bubble *targetBubble) {
    // ... your code
}
Salin selepas log masuk

Apabila anda lulus penunjuk sebagai parameter, fungsi mencipta salinan baharu penunjuk itu dalam skop setempatnya. Sebarang pengubahsuaian yang dibuat pada salinan tempatan penunjuk tidak akan menjejaskan penunjuk asal di luar fungsi. Dalam senario di atas, kod cuba untuk menetapkan targetBubble kepada elemen vektor gelembung dalam fungsi, tetapi tugasan ini hanya mengubah suai salinan tempatan targetBubble.

Untuk mengubah suai penunjuk di luar fungsi dengan berkesan, sama ada gunakan penunjuk kepada penunjuk atau rujukan kepada penunjuk. Ini membenarkan fungsi untuk mengakses dan mengubah suai penuding asal.

Menggunakan Penunjuk kepada Penunjuk:

void foo(int **ptr) {
    *ptr = new int[10]; // Assign memory to the pointed-to location
}
Salin selepas log masuk

Dalam contoh ini, fungsi foo mengambil penuding kepada penunjuk sebagai hujahnya. Ia kini boleh mengubah suai penuding itu sendiri, memberikan nilai baharu kepadanya.

Menggunakan Rujukan kepada Penunjuk:

void bar(int *&ptr) {
    ptr = new int[10]; // Assign memory to the pointed-to location
}
Salin selepas log masuk

Di sini, bar fungsi mengambil rujukan kepada penunjuk. Ia boleh mengakses dan mengubah suai penunjuk asal secara langsung.

Atas ialah kandungan terperinci Mengapa Mengubah Penunjuk dalam Fungsi C Tidak Mengubah Penunjuk Asal?. 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