Sebelum membahas perbedaan antara pointer dan referensi, mari kita lihat terlebih dahulu arti dari kedua istilah ini. Dalam suatu program, data menempati memori. Lokasi memori yang tepat di mana data ditempatkan pada waktu eksekusi harus diketahui untuk mengaksesnya. Variabel pointer dan variabel referensi digunakan untuk mengakses data ini dan memanipulasi alamat memori mereka. Artinya, baik pointer dan referensi dapat digunakan untuk merujuk ke objek secara tidak langsung. Mereka pada dasarnya memegang alamat memori sebagai nilainya. Itu perbedaan utama antara pointer dan referensi adalah itu pointer adalah variabel yang menyimpan alamat lokasi memori variabel lain sementara a referensi adalah variabel yang merujuk ke variabel lain. Kedua mekanisme itu, itu penunjuk dan referensi, memiliki sintaks dan penggunaan yang berbeda.
Pointer adalah objek bahasa pemrograman yang menyimpan alamat memori suatu nilai dalam memori komputasi.
int i = 5;
int * ptr = & i;
Baris pertama mendefinisikan variabel yang diinisialisasi dengan nilai 5. Baris kedua mendefinisikan pointer ke alamat memori variabel. Di sini, 'ptr' dinyatakan sebagai objek bertipe 'pointer to int' yang nilai awalnya adalah alamat objek i. Pada dasarnya ptr menunjuk ke i dengan menyimpan alamat memorinya.
Mendapatkan nilai yang disimpan di lokasi memori disebut dereferencing. Operator * digunakan untuk melakukan dereferensi pointer. Setelah deklarasi selesai, ekspresi tidak langsung * ptr dereferences ptr untuk merujuk ke i.
Untuk mengubah nilai i, tugas berikut dapat digunakan;
* ptr = 20;
Pointer dapat dipindahkan untuk merujuk ke objek yang berbeda juga.
SEBUAH pointer nol adalah jenis pointer khusus. Pointer null sering dilambangkan dengan 0 atau nol dan tidak menunjukkan apa-apa. Ini praktik yang baik untuk menggunakan pointer nol jika tidak memiliki alamat yang tepat untuk ditugaskan ke pointer. Tugas ini dapat digunakan dalam operasi dan kondisi logis.
Pointer bisa digunakan untuk menyimpan dan mengelola alamat memori yang dialokasikan secara dinamis. Implementasi dan pengendalian struktur data seperti tumpukan, antrian, dan daftar dapat dibuat efisien dengan penggunaan pointer. Misalnya, antrian mungkin memiliki dua petunjuk; pointer kepala dan pointer ekor. Pointer juga dapat digunakan untuk meneruskan variabel dengan alamat mereka, yang akan memungkinkan nilai diubah. Memanipulasi memori secara langsung atau perangkat yang dipetakan memori juga dapat ditangani dengan menggunakan pointer.
Pointer memungkinkan akses ke memori yang dilindungi dan tidak dilindungi. Oleh karena itu, tindakan pencegahan yang diperlukan harus diambil untuk memverifikasi bahwa konten pointer valid. Jika tidak, mendereferensi pointer dengan alamat memori yang tidak valid dapat menyebabkan program macet.
Pointer didukung dalam bahasa seperti C, C ++, Pascal dan banyak bahasa assembly.
Pointer Sebuah menunjuk ke alamat memori yang terkait dengan variabel b.
Referensi hanyalah sebuah pengidentifikasi alternatif untuk nilai yang disimpan dalam memori. Ini memungkinkan suatu program untuk secara tidak langsung mengakses datum tertentu.
int i = 5;
int & ref = saya;
Baris pertama mendefinisikan variabel yang diinisialisasi dengan nilai 5. Baris kedua menyatakan 'ref' sebagai objek bertipe 'referensi ke int' yang mengacu pada i. Referensi berbeda dari data itu sendiri mengingat bahwa referensi diimplementasikan sebagai alamat fisik dari datum tertentu yang disimpan dalam memori.
Setelah ditentukan, referensi tidak dapat dialihkan nilai baru. Referensi selalu merujuk ke objek yang diinisialisasi. Dalam tugas berikut, ref masih merujuk ke i, tetapi nilainya sekarang 20.
ref = 20;
Menurut contoh di atas, referensi dereferencing tidak memerlukan operator apa pun.
Referensi dapat digunakan ketika variabel selalu merujuk ke suatu objek. Ini karena, tidak seperti pointer, referensi tidak boleh nol dan harus selalu diberikan pada inisialisasi. Karena referensi harus selalu merujuk ke beberapa objek, membuat variabel seperti referensi memastikan program akan bekerja secara efisien dan benar. Mengingat bahwa, tidak ada referensi nol, validitas variabel referensi tidak harus diuji.
Variabel referensi dapat digunakan untuk secara efisien melewatkan data besar sebagai argumen untuk prosedur. Referensi juga digunakan dalam berbagi data besar antara area kode yang berbeda karena masing-masing kode menyimpan referensi ke data.
Bahasa pemrograman seperti C ++, Java, Python, Perl, PHP, Ruby, dll. Mendukung referensi.
Pointer: Pointer adalah alamat memori objek yang disimpan dalam memori komputasi.
Referensi: Referensi adalah pengidentifikasi alternatif atau alias untuk objek.
Pointer: Pointer dideklarasikan dengan operator *.
Referensi: Referensi dideklarasikan dengan operator &.
Pointer: Variabel pointer memerlukan operator * untuk direferensikan.
Referensi: Variabel referensi tidak memerlukan operator untuk direferensikan.
Pointer: Pointer dapat diinisialisasi ke nol. Variabel seperti itu disebut null pointer.
Referensi: Referensi tidak dapat diinisialisasi ke nol. Tidak ada yang namanya referensi nol. Referensi harus selalu merujuk ke suatu objek.
Pointer: Variabel pointer dapat dipindahkan untuk merujuk ke objek yang berbeda.
Referensi: Variabel referensi tidak dapat dipindahkan. Itu selalu mengacu pada objek yang diinisialisasi.
Pointer: Variabel pointer harus digunakan ketika kemungkinan merujuk ke tidak ada atau ketika diharuskan untuk merujuk hal-hal yang berbeda pada waktu yang berbeda.
Referensi: Variabel referensi harus digunakan ketika akan selalu ada objek untuk merujuk dan ketika itu tidak diperlukan untuk menggunakan variabel referensi untuk merujuk ke hal lain selain objek itu.
Pointer: Variabel pointer dapat digunakan untuk mengimplementasikan algoritma dan struktur data.
Referensi: Variabel referensi dapat digunakan dalam parameter fungsi, dan tipe pengembalian mendefinisikan antarmuka yang berguna.
Pointer: Bahasa pemrograman seperti C, C ++, Pascal dan banyak bahasa assembly mendukung pointer.
Referensi: Bahasa pemrograman seperti C ++, Java, Python, Perl, PHP, Ruby, dll. Mendukung referensi.
Gambar Courtesy: "Pointer" oleh File ini dibuat oleh Pengguna: SvenTranslation.Own work. Gambar vektor ini dibuat dengan Inkscape. (CC BY-SA 3.0) via Commons -