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 }
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 }
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 }
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!