Perbezaan antara Pointer dan Rujukan

Kedua-dua petunjuk dan rujukan adalah ciri yang paling berkuasa dalam C dan C ++ yang membolehkan pengaturcara memanipulasi alamat memori secara langsung untuk pengurusan memori yang cekap.

Kedua-duanya adalah pembolehubah yang digunakan untuk merujuk kepada objek lain secara tidak langsung dan mereka berkongsi beberapa ciri umum di permukaan. Walaupun mereka berkongsi banyak keupayaan bersama, mereka juga sangat kompleks untuk difahami.

Penunjuk adalah pemboleh ubah yang memegang alamat memori pembolehubah lain, sedangkan rujukannya adalah seperti penunjuk yang boleh digunakan untuk secara tidak langsung merujuk kepada pembolehubah lain.

Kebanyakan pengaturcara seolah-olah membangunkan beberapa pemahaman tentang bila menggunakan petunjuk dan apabila menggunakan rujukan, tetapi mereka sering menemui masalah penyelesaian yang tampaknya tidak jelas.

Jadi untuk lebih memahami falsafah, mari kita faham perbezaan antara keduanya.

Apakah penunjuk??

Setiap pemboleh ubah adalah lokasi ingatan yang ditakrifkan oleh alamatnya dan dipasangkan dengan pengecam yang mengandungi beberapa nilai yang boleh diubah semasa program dijalankan. Secara ringkas, pemboleh ubah adalah simbol yang mewakili kuantiti.

Penunjuk adalah pemboleh ubah yang mengandungi alamat memori pemboleh ubah yang lain. Penunjuk adalah apa-apa tetapi alamat dan pembolehubah yang menyimpan penunjuk dipanggil pembolehubah penunjuk.

Ideanya ialah menggunakan pengenal (atau nama) dan bukannya alamat berangka untuk meringankan beban pengaturcaraan dengan itu mengurangkan kerumitan program. Oleh sebab alamat ini merujuk kepada lokasi sebenar dalam memori komputer, petunjuk boleh digunakan untuk mengakses dan memanipulasi kandungan yang disimpan dalam memori.

Seperti mana-mana pembolehubah atau malar, petunjuk mesti diisytiharkan untuk jenis mereka. Oleh kerana petunjuk mengandungi alamat memori yang termasuk dalam jenis data yang berasingan, mereka mesti diisytiharkan menggunakan petunjuk sebelum anda boleh bekerja dengannya. Bentuk umum pengisytiharan penunjuk adalah:

Data_type * var-name;

Di sini, "Data_type" adalah jenis asas penunjuk dan "var-name" adalah pembolehubah penunjuk. Asterisk (*) di sini digunakan untuk mengisytiharkan penunjuk yang menunjuk pembolehubah "var-name" sebagai pembolehubah penunjuk.

int * p; // penunjuk integer

float * x; // penunjuk float

Di sini, variabel "p" menunjuk kepada jenis data integer yang diisytiharkan sebagai "int" yang merujuk kepada jenis data pembolehubah. Begitu juga, dalam contoh kedua, "terapung" merujuk kepada jenis data pemboleh ubah "x" yang pada hakikatnya ditetapkan sebagai penunjuk kepada pembolehubah terapung-titik.

Apakah Rujukan itu?

Rujukan adalah seperti penuding dengan akses tidak langsung kepada pembolehubah. Ia seperti alias untuk pemboleh ubah yang lain, yang bermaksud ia hanya nama lain untuk pembolehubah yang sedia ada.

Ia membolehkan pengaturcara membuat nama kedua bagi pemboleh ubah yang boleh digunakan untuk memanipulasi kandungan yang disimpan dalam pemboleh ubah tersebut. Ia adalah entiti yang merupakan alias untuk pemboleh ubah yang lain dan ia mempunyai alamat yang sama dengan pemboleh ubah asal. Ia menyokong lulus selaras bertindak sebagai parameter formal fungsi dan apabila ia ditakrifkan untuk merujuk kepada pembolehubah, ia tidak boleh diresepkan yang bermaksud ia tidak boleh dirujuk kepada pembolehubah lain.

Tidak seperti petunjuk, mereka tidak memerlukan operator dereferencing untuk mengakses nilai; sebenarnya, mereka boleh digunakan seperti pemboleh ubah biasa.

int i;

int & ri = i;

Di sini, "ri" adalah rujukan integer yang diisytiharkan kepada "i". Ia mengisytiharkan "ri" sebagai objek jenis "merujuk kepada int". Rujukan boleh dengan mudah dikelirukan dengan penunjuk yang merupakan pembolehubah bebas, nilai alamat yang tidak dapat ditugaskan semula setelah dibuat.

Perbezaan antara Pointer dan Rujukan

  1. Asas-asas Penunjuk dan Rujukan

- Kedua-duanya memberikan keupayaan hampir serupa dari segi kebolehgunaan dan perbezaannya boleh menjadi rumit. Penunjuk adalah hanya pembolehubah yang menyimpan alamat memori pembolehubah lain, sedangkan rujukannya adalah seperti alias untuk pembolehubah yang sudah ada. Ia mencipta nama kedua untuk pemboleh ubah yang boleh digunakan untuk mengubah suai kandungan yang disimpan dalam pemboleh ubah tersebut.

  1. Pengisytiharan Pointer dan Rujukan

- Penunjuk adalah seperti pembolehubah lain yang menyimpan sekeping data. Tidak seperti variabel lain, pembolehubah penunjuk menyimpan alamat memori bukan nilai. Penuding dereferenced menggunakan operator * indirection untuk mengakses lokasi memori pembolehubah yang ditunjukkan kepadanya. Sebaliknya, rujukan tidak memerlukan pengendali dereferencing untuk mengakses nilai.

  1. Penempatan semula Penunjuk dan Rujukan

- Tidak seperti petunjuk yang boleh dimulakan pada bila-bila masa, rujukan mesti diberikan pada permulaan. Penunjuk boleh diakses secara langsung, sedangkan rujukan tidak boleh diakses secara langsung.

  1. Alamat Memori untuk Petunjuk dan Rujukan

- Pembolehubah penunjuk mempunyai lokasi sendiri dalam ingatan, yang bermaksud apabila anda mengisytiharkan penuding, anda menentukan lokasi yang merupakan alamat memori yang diberikan kepada setiap unit memori. Pembolehubah penunjuk mempunyai alamat yang sama di mana ia disimpan dalam ingatan. Variabel rujukan, sebaliknya, adalah alias untuk pembolehubah lain dengan itu mengambil alamat pembolehubah rujukan.

  1. Nilai NULL untuk Pointer dan Rujukan

- NULL mewakili akhir senarai yang bermaksud ia menunjukkan nilai tidak diketahui dan ia menentukan bahawa pembolehubah tidak mempunyai ruang alamat yang sah. Nilai NULL boleh ditugaskan kepada pembolehubah penunjuk secara langsung yang menunjukkan bahawa ia tidak menunjukkan di mana-mana, sedangkan NULL tidak dapat diberikan kepada pembolehubah rujukan.

Penunjuk vs Penunjuk: Carta Perbandingan

Ringkasan Pointer vs Rujukan

Penunjuk sentiasa menjadi topik perbincangan kegemaran C / C ++ pengaturcara sehingga rujukan datang ke gambar. Rujukan agak serupa dengan petunjuk tetapi mempunyai bahagian yang adil dan kebaikan mereka berbanding. Walaupun kedua-duanya boleh digunakan untuk mengubah pembolehubah tempatan satu fungsi dalam fungsi lain, mereka mempunyai perbezaan mereka. Kedua-duanya adalah ciri yang kuat dalam C dan C ++ yang membolehkan anda untuk memanipulasi memori secara langsung, tetapi dengan beberapa pengecualian. Penunjuk memegang alamat memori pembolehubah, sedangkan rujukan hanya alias untuk pemboleh ubah yang lain.