Rumah > Artikel > pembangunan bahagian belakang > Bilakah Parameter Penunjuk dan Rujukan Setara secara Fungsi dalam C?
Dalam C , konsep penunjuk dan parameter rujukan sering membawa kepada kekeliruan. Artikel ini menjelaskan perbezaan halus antara menggunakan penunjuk dan rujukan sebagai parameter fungsi, dengan penekanan pada kesetaraan fungsinya di bawah keadaan tertentu.
Perbezaan utama antara penunjuk dan rujukan terletak dalam semantik mereka. Penunjuk ialah pembolehubah yang menyimpan alamat memori pembolehubah lain, manakala rujukan ialah alias atau sinonim untuk pembolehubah sedia ada. Perbezaan ini nyata dalam beberapa cara:
Penunjuk mempunyai pemilikan eksplisit terhadap data yang mereka tunjuk. Mereka boleh ditugaskan semula untuk menunjuk ke lokasi memori yang berbeza atau bahkan ditetapkan kepada nullptr. Rujukan, sebaliknya, tidak secara eksplisit memiliki data yang mereka rujuk. Sebaik sahaja rujukan dimulakan, ia tidak boleh ditugaskan semula kepada objek lain.
Penunjuk boleh diberikan nilai NULL, menunjukkan bahawa ia tidak menunjuk ke mana-mana lokasi memori yang sah. Rujukan tidak boleh diberikan NULL kerana ia sentiasa alias untuk pembolehubah yang mesti wujud.
Apabila anda mengambil alamat penuding, anda mendapat alamat pembolehubah penunjuk itu sendiri. Apabila anda mengambil alamat rujukan, anda mendapat alamat objek yang dirujuk.
Walaupun terdapat perbezaannya, penunjuk dan parameter rujukan boleh berfungsi secara fungsional setara dalam senario tertentu. Contoh yang paling ketara ialah apabila kaedah someInt() dalam contoh kod anda bukan maya. Dalam kes ini, kedua-dua fungsi pada dasarnya memanggil kaedah yang sama pada objek yang sama, tidak kira sama ada objek itu dihantar sebagai penunjuk atau rujukan.
Walau bagaimanapun, apabila someInt() diisytiharkan maya, fungsi yang dipanggil akan bergantung pada jenis sebenar objek yang dilalui, walaupun parameter formal adalah penunjuk ke bar kelas asas. Ini kerana menghantar rujukan kepada kelas asas tidak mengubah jenis dinamik objek yang dihantar.
Coretan kod:
bar& ref = *ptr_to_bar;
mencipta rujukan rujukan yang merujuk kepada objek yang ditunjuk oleh ptr_to_bar. Ini mungkin kerana pengendali penuding (*) menyahrujuk penuding, mengembalikan objek yang ditunjukkannya. Akibatnya, ref dan *ptr_to_bar ialah alias untuk objek yang sama.
Atas ialah kandungan terperinci Bilakah Parameter Penunjuk dan Rujukan Setara secara Fungsi dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!