Sebelum membincangkan perbezaan antara penunjuk dan rujukan, marilah kita melihat terlebih dahulu pengertian kedua-dua istilah secara ringkas. Dalam satu program, data menduduki ingatan. Lokasi memori yang tepat di mana data diletakkan pada masa pelaksanaan harus diketahui untuk mengaksesnya. Pembolehubah penunjuk dan pembolehubah rujukan digunakan untuk mengakses data ini dan memanipulasi alamat memori yang mereka ada. Iaitu, kedua-dua petunjuk dan rujukan boleh digunakan untuk merujuk objek secara tidak langsung. Mereka pada asasnya memegang alamat memori sebagai nilai mereka. The perbezaan utama antara penunjuk dan sebutannya penunjuk adalah pembolehubah yang menyimpan alamat lokasi memori pembolehubah lain sementara a rujukan adalah pembolehubah yang merujuk kepada pemboleh ubah yang lain. Kedua mekanisme ini, yang penunjuk dan rujukan, mempunyai sintaks dan penggunaan yang berbeza.
Penunjuk adalah objek bahasa pengaturcaraan yang menyimpan alamat memori nilai dalam ingatan pengkomputeran.
int i = 5;
int * ptr = & i;
Baris pertama mentakrifkan pembolehubah yang dimulakan dengan nilai 5. Baris kedua mentakrifkan penuding ke alamat memori pembolehubah. Di sini, 'ptr' diisytiharkan sebagai objek jenis 'penunjuk ke int' yang nilai awal ialah alamat objek i. Secara asasnya, titik pembolehubah ptr kepada saya dengan menyimpan alamat ingatannya.
Mendapatkan nilai yang disimpan di lokasi memori dipanggil dereferencing. * Operator digunakan untuk mengarahkan penunjuk. Selepas pengisytiharan selesai, ungkapan tidak langsung * ptr dereferences ptr merujuk kepada i.
Untuk menukar nilai i, selepas tugasan boleh digunakan;
* ptr = 20;
Penunjuk boleh ditugaskan semula untuk merujuk kepada objek yang berbeza juga.
A penunjuk null adalah jenis penunjuk khas. Penunjuk null sering dilambangkan oleh 0 atau null dan tidak memberi apa-apa. Amalan yang baik untuk menggunakan penunjuk null dalam hal tidak mempunyai alamat yang tepat untuk ditugaskan kepada penunjuk. Tugasan ini boleh digunakan dalam operasi dan syarat logik.
Penunjuk boleh digunakan untuk menyimpan dan menguruskan alamat memori dinamik yang diperuntukkan. Pelaksanaan dan pengawalan struktur data seperti susunan, beratur, dan senarai dapat dibuat dengan efisien dengan menggunakan petunjuk. Misalnya, baris gilir mungkin mempunyai dua petunjuk; penunjuk kepala dan penunjuk ekor. Penunjuk juga boleh digunakan untuk melewati pemboleh ubah oleh alamat mereka, yang akan membolehkan nilai diubah. Alat manipulasi memori atau memori yang dipetakan secara langsung juga boleh dikendalikan dengan menggunakan petunjuk.
Penunjuk membolehkan kedua-dua capaian yang dilindungi dan tidak dilindungi ke memori yang dialamatkan. Oleh itu, langkah berjaga-jaga yang perlu diambil untuk mengesahkan bahawa kandungan penunjuk adalah sah. Jika tidak, dereferencing penunjuk dengan alamat memori tidak sah mungkin menyebabkan program crash.
Petunjuk disokong dalam bahasa seperti C, C ++, Pascal dan banyak bahasa pemasangan.
Penunjuk a menunjuk kepada alamat memori yang berkaitan dengan pembolehubah b.
Rujukan adalah semata-mata pengecam alternatif untuk nilai yang disimpan dalam memori. Ia membolehkan program untuk secara tidak langsung mengakses datum tertentu.
int i = 5;
int & ref = i;
Baris pertama mentakrifkan pemboleh ubah yang dimulakan dengan nilai 5. Baris kedua mengisytiharkan 'ref' sebagai objek jenis 'rujukan kepada int' yang merujuk kepada i. Rujukan adalah berbeza daripada data itu sendiri memandangkan rujukan dijadikan sebagai alamat fizikal datum tertentu yang disimpan dalam ingatan.
Sebaik sahaja didefinisikan, rujukan tidak boleh ditugaskan semula nilai baru. Rujukan sentiasa merujuk kepada objek yang mana ia diasaskan. Dalam tugasan berikut, ref masih merujuk kepada i, tetapi nilai kini 20.
ref = 20;
Mengikut contoh di atas, rujukan dereferencing tidak memerlukan mana-mana pengendali.
Rujukan boleh digunakan apabila pemboleh ubah sentiasa merujuk kepada objek. Ini kerana, tidak seperti petunjuk, rujukan tidak boleh dianggap batal dan mesti sentiasa diberikan pada permulaan. Oleh kerana rujukan mestilah merujuk kepada beberapa objek, menjadikan pemboleh ubah tersebut sebutan memastikan program berfungsi dengan cekap dan betul. Memandangkan itu, tidak terdapat rujukan null, kesahihan pembolehubah rujukan tidak perlu diuji.
Pembolehubah rujukan boleh digunakan untuk melepasi data besar secara efisien sebagai hujah kepada prosedur. Rujukan juga digunakan untuk berkongsi data besar antara kawasan kod berbeza kerana setiap kod menyimpan rujukan kepada data.
Bahasa pengaturcaraan seperti C ++, Java, Python, Perl, PHP, Ruby, dan sebagainya menyokong rujukan.
Penunjuk: Penunjuk ialah alamat ingatan objek yang disimpan dalam memori pengkomputeran.
Rujukan: Rujukan adalah pengecam alternatif atau alias untuk objek.
Penunjuk: Penunjuk diisytiharkan dengan operator *.
Rujukan: Rujukan diisytiharkan dengan & pengendali.
Penunjuk: Pembolehubah penunjuk memerlukan operator * untuk dereferenced.
Rujukan: Variabel rujukan tidak memerlukan pengendali untuk dereferenced.
Penunjuk: Penunjuk boleh diinisialisasi menjadi null. Pemboleh ubah sedemikian dipanggil penunjuk null.
Rujukan: Rujukan tidak boleh diisytiharkan menjadi null. Tiada apa-apa perkara sebagai rujukan batal. Rujukan mestilah merujuk kepada objek.
Penunjuk: Pembolehubah penunjuk boleh ditugaskan semula untuk merujuk kepada objek yang berbeza.
Rujukan: Pembolehubah rujukan tidak boleh ditugaskan semula. Ia sentiasa merujuk kepada objek yang mana ia telah diasaskan.
Penunjuk: Pembolehubah penunjuk harus digunakan apabila kemungkinan merujuk kepada apa-apa yang ada atau ketika diperlukan untuk merujuk kepada berbagai perkara pada waktu yang berbeda.
Rujukan: Pembolehubah rujuk hendaklah digunakan apabila sentiasa ada objek untuk dirujuk dan apabila ia tidak dikehendaki menggunakan pembolehubah rujukan untuk merujuk kepada benda lain selain objek tersebut.
Penunjuk: Pembolehubah penunjuk boleh digunakan untuk melaksanakan algoritma dan struktur data.
Rujukan: Pembolehubah rujukan boleh digunakan dalam parameter fungsi, dan jenis pulangan menentukan antara muka yang berguna.
Penunjuk: Bahasa pengaturcaraan seperti C, C ++, Pascal dan banyak bahasa sokongan penganjur.
Rujukan: Bahasa pengaturcaraan seperti C ++, Java, Python, Perl, PHP, Ruby, dan sebagainya menyokong rujukan.
Image Courtesy: "Pointers" oleh Fail ini dibuat oleh Pengguna: SvenTranslation.Own work.This vektor imej dicipta dengan Inkscape. (CC BY-SA 3.0) melalui Commons -