Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Petunjuk lwn Rujukan dalam Fungsi C: Kesetaraan Fungsian atau Perbezaan Halus?

Petunjuk lwn Rujukan dalam Fungsi C: Kesetaraan Fungsian atau Perbezaan Halus?

Susan Sarandon
Susan Sarandonasal
2024-11-03 00:43:291002semak imbas

Pointers vs. References in C   Functions: Functional Equivalence or Subtle Differences?

Parameter Penunjuk lwn. Rujukan: Kesetaraan Fungsian dan Perbezaan Halus

Dalam C , penunjuk dan rujukan kedua-duanya digunakan sebagai parameter kepada fungsi, tetapi mereka berbeza dalam tingkah laku dan semantik mereka. Mari kita selidiki perbezaan utama antara dua jenis parameter ini.

Adakah foo() dan foo() Setara?

Coretan di bawah menunjukkan dua fungsi dengan jenis parameter yang berbeza :

<code class="cpp">int foo(bar* p) {
  return p->someInt();
}

int foo(bar& r) {
  return r.someInt();
}</code>

Secara fungsional, kedua-dua fungsi ini adalah setara jika syarat berikut dipenuhi:

  • someInt() bukan maya.
  • Fungsi diluluskan contoh bar atau subkelasnya.

Sebabnya ialah kedua-dua penunjuk dan parameter rujukan menyediakan akses terus ke lokasi memori yang sama. Dalam kes ini, perbezaan dalam sintaks akses (., ->) adalah tidak ketara.

Tugasan melalui Penunjuk dan Rujukan

Barisan di bawah menunjukkan operasi tugasan yang melibatkan penunjuk dan rujukan:

<code class="cpp">bar& ref = *ptr_to_bar;</code>

Tugasan ini tidak melibatkan sebarang penghirisan atau kehilangan data. Ia memberikan nilai objek yang ditunjuk oleh ptr_to_bar kepada rujukan rujukan.

Perbezaan Halus Melangkaui Fungsi

Walaupun penunjuk dan rujukan mempunyai kefungsian yang setara dalam contoh di atas, terdapat perbezaan yang ketara untuk diambil perhatian:

  • Boleh Batal: Penunjuk boleh diberikan NULL, manakala rujukan tidak boleh.
  • Penukaran: Mengambil alamat penuding menghasilkan alamat pembolehubah penunjuk, sambil mengambil alamat rujukan menghasilkan alamat pembolehubah yang dirujuk.
  • Penugasan semula: Rujukan tidak boleh ditetapkan semula setelah dimulakan, manakala penunjuk boleh ditugaskan semula untuk menunjuk ke objek yang berbeza.

Atas ialah kandungan terperinci Petunjuk lwn Rujukan dalam Fungsi C: Kesetaraan Fungsian atau Perbezaan Halus?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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