Bolehkah Rujukan Ditugaskan Semula dalam C ?
Dalam C , rujukan sering disebut-sebut sebagai entiti tidak berubah yang mesti dimulakan sekali dan untuk semua. Walau bagaimanapun, coretan kod terbaharu telah menimbulkan persoalan tentang prinsip ini.
Coretan Kod:
int i = 5, j = 9; int &ri = i; cout << "ri is : " << ri << "\n"; i = 10; cout << "ri is : " << ri << "\n"; ri = j; cout << "ri is : " << ri << "\n";
Pemerhatian:
Soalan:
Adakah kod ini benar-benar menetapkan semula rujukan ri atau sesuatu yang lain berlaku?
Jawapan:
Tidak, ri masih merujuk kepada i. Penugasan semula yang nyata sebenarnya adalah pengubahsuaian i melalui rujukan ri.
Penjelasan:
Apabila rujukan diisytiharkan (cth., int &ri = i), ia mengikat kepada objek (i dalam kes ini) dan kekal dipautkan kepadanya sepanjang program. Kod ri = j tidak menetapkan semula ri tetapi mengubah suai nilai i melalui rujukan ri.
Untuk membuktikan ini, seseorang boleh mencetak alamat ri dan i menggunakan &ri dan &i, yang akan menunjukkan ia kekal yang sama. Selain itu, jika ri ditugaskan semula kepada j, ia tidak lagi boleh mengubah suai i melalui ri, yang tidak berlaku dalam kod yang diberikan.
Kesimpulan:
Walaupun rujukan nampaknya boleh ditetapkan semula dalam coretan kod, ia tidak. Sebaliknya, mereka secara tidak langsung mengubah suai objek yang mereka rujuk. Rujukan const (cth., const int &cri = i) menghalang pengubahsuaian tersebut dan menguatkuasakan kebolehubahan sebenar.
Atas ialah kandungan terperinci Bolehkah Rujukan C Ditugaskan Semula, atau Adakah Perkara Lain Berlaku?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!