Nilai Panggilan: Memahami Had
Pertimbangkan contoh panggilan demi nilai ini di mana kami cuba mengubah suai nilai input parameter dalam fungsi:
#include <iostream> using namespace std; void changeValue(int value); int main() { int value = 5; changeValue(value); cout << "The value is : " << value << "." << endl; return 0; } void changeValue(int value) { value = 6; }
Anehnya, output kekal 5 walaupun kami berusaha untuk tukar kepada 6. Tingkah laku ini berpunca daripada prinsip asas panggilan demi nilai dalam C/C .
Intipati Panggilan demi Nilai
Dalam panggilan demi nilai, salinan pembolehubah asal dihantar ke fungsi sebagai hujah. Sebarang pengubahsuaian yang dibuat pada salinan ini dalam fungsi kekal terhad kepada skop setempat tersebut dan tidak menjejaskan pembolehubah asal.
Dalam contoh kami, fungsi changeValue menerima salinan nilai daripada main(). Sebarang perubahan yang dibuat pada salinan ini tidak memberi kesan kepada pembolehubah nilai asal.
Penyelesaian: Pass-by-Reference
Untuk mengubah suai pembolehubah asal dari dalam fungsi, kita mesti menggunakan rujukan lewat. Dalam C/C , ini dilambangkan seperti berikut:
void changeValue(int &value);
Dengan menggunakan & dalam tandatangan fungsi, kami mencipta rujukan (alias) kepada pembolehubah asal. Sebarang perubahan yang dibuat pada rujukan juga mengubah suai pembolehubah asal.
Contoh Laluan-demi-Rujukan
void changeValue(int &value) { value = 6; }
Sekarang, apabila kita memanggil changeValue dalam main(), rujukan kepada nilai dihantar kepada fungsi, membenarkan ia mengubah suai nilai asal:
int main() { int value = 5; changeValue(value); cout << "The value is : " << value << "." << endl; return 0; }
Dalam ini senario, output mencerminkan nilai yang diubah suai dengan betul: 6.
Atas ialah kandungan terperinci Mengapakah Panggilan demi Nilai Tidak Mengubah Suai Pembolehubah Asal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!