Bilakah Parameter Penunjuk dan Rujukan Setara secara Fungsi dalam C?

Susan Sarandon
Lepaskan: 2024-11-03 15:56:30
asal
873 orang telah melayarinya

When are Pointer and Reference Parameters Functionally Equivalent in C  ?

Membezakan Parameter Penunjuk dan Rujukan

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.

Penunjuk vs. Rujukan

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:

1. Pemilikan dan Tugasan

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.

2. NULL Handling

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.

3. Menangani

Apabila anda mengambil alamat penuding, anda mendapat alamat pembolehubah penunjuk itu sendiri. Apabila anda mengambil alamat rujukan, anda mendapat alamat objek yang dirujuk.

Kesamaan Fungsian Penunjuk dan Parameter Rujukan

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.

Merujuk Melalui Penunjuk

Coretan kod:

bar& ref = *ptr_to_bar;
Salin selepas log masuk

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!

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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!