Baik pointer dan referensi adalah fitur paling kuat di C dan C ++ yang memungkinkan programmer untuk memanipulasi alamat memori secara langsung untuk manajemen memori yang efisien.
Keduanya adalah variabel yang digunakan untuk merujuk ke objek lain secara tidak langsung dan mereka berbagi beberapa fitur umum di permukaan. Meskipun mereka berbagi banyak kemampuan umum, mereka juga sangat kompleks untuk dipahami.
Pointer adalah variabel yang menyimpan alamat memori variabel lain, sedangkan referensi seperti pointer yang dapat digunakan untuk secara tidak langsung merujuk ke variabel lain.
Sebagian besar programmer tampaknya mengembangkan beberapa pemahaman tentang kapan harus menggunakan pointer dan kapan harus menggunakan referensi, tetapi mereka sering menemukan masalah solusi yang tampaknya tidak jelas.
Jadi untuk lebih memahami filosofi, mari kita pahami perbedaan antara keduanya.
Setiap variabel adalah lokasi memori yang ditentukan oleh alamatnya dan dipasangkan dengan pengenal yang berisi beberapa nilai yang dapat diubah selama program berlangsung. Secara sederhana, variabel adalah simbol yang mewakili kuantitas.
Pointer adalah variabel yang berisi alamat memori variabel lain. Pointer tidak lain adalah alamat dan variabel yang menyimpan pointer disebut variabel pointer.
Idenya adalah untuk menggunakan pengidentifikasi (atau nama) alih-alih alamat numerik untuk meringankan beban pemrograman sehingga mengurangi kompleksitas program. Karena alamat ini merujuk ke lokasi sebenarnya dalam memori komputer, pointer dapat digunakan untuk mengakses dan memanipulasi konten yang tersimpan dalam memori.
Seperti variabel atau konstanta apa pun, pointer harus dideklarasikan untuk tipenya. Karena pointer berisi alamat memori yang dimiliki oleh tipe data yang terpisah, mereka harus dideklarasikan menggunakan pointer sebelum Anda dapat bekerja dengannya. Bentuk umum dari deklarasi pointer adalah:
Data_type * var-name;
Di sini, "Data_type" adalah tipe dasar dari pointer dan "var-name" adalah variabel pointer. Tanda bintang (*) di sini digunakan untuk mendeklarasikan pointer yang menunjuk variabel "var-name" sebagai variabel pointer.
int * p; // pointer integer
float * x; // float pointer
Di sini, variabel "p" menunjuk ke tipe data integer yang dinyatakan sebagai "int" yang mengacu pada tipe data dari variabel. Demikian pula, dalam contoh kedua, "float" mengacu pada tipe data dari variabel "x" yang sebenarnya ditunjuk sebagai pointer ke variabel floating-point.
Referensi seperti pointer dengan akses tidak langsung ke variabel. Ini seperti alias untuk variabel lain, artinya hanya nama lain untuk variabel yang sudah ada.
Ini memungkinkan programmer untuk membuat nama kedua untuk variabel yang dapat mereka gunakan untuk memanipulasi konten yang disimpan dalam variabel itu. Ini adalah entitas yang merupakan alias untuk variabel lain dan memiliki alamat yang sama dengan variabel asli. Ini mendukung pass-by-reference yang berfungsi sebagai parameter formal fungsi dan setelah didefinisikan untuk merujuk ke variabel, itu tidak dapat diulang yang berarti tidak dapat dirujuk ke variabel lain.
Tidak seperti pointer, mereka tidak perlu operator dereferencing untuk mengakses nilai; pada kenyataannya, mereka dapat digunakan seperti variabel normal.
int i;
int & ri = i;
Di sini, "ri" adalah referensi integer yang diinisialisasi ke "i". Ini menyatakan "ri" sebagai objek tipe "referensi ke int". Referensi dapat dengan mudah dikacaukan dengan pointer yang merupakan variabel independen, nilai-nilai alamatnya tidak dapat dipindahkan setelah dibuat.
- Keduanya menyediakan kemampuan yang hampir serupa dalam hal kegunaan dan perbedaannya bisa rumit. Pointer hanyalah variabel yang menyimpan alamat memori variabel lain, sedangkan referensi seperti alias untuk variabel yang sudah ada. Itu menciptakan nama kedua untuk variabel yang dapat digunakan untuk mengubah konten yang disimpan dalam variabel itu.
- Pointer adalah seperti variabel lain yang menyimpan sepotong data. Tidak seperti variabel lain, variabel pointer menyimpan alamat memori, bukan nilai. Pointer didereferensi menggunakan operator tidak langsung * untuk mengakses lokasi memori dari variabel yang ditunjuknya. Referensi, di sisi lain, tidak memerlukan operator dereferencing untuk mengakses nilai.
- Tidak seperti pointer yang dapat diinisialisasi kapan saja, referensi harus ditetapkan pada inisialisasi. Pointer dapat diakses secara langsung, sedangkan referensi tidak dapat diakses secara langsung.
- Variabel pointer memiliki lokasi sendiri di memori, yang berarti ketika Anda mendeklarasikan pointer, Anda menentukan lokasi yang merupakan alamat memori yang ditetapkan untuk setiap unit memori. Variabel pointer memiliki alamat yang sama di mana ia disimpan dalam memori. Variabel referensi, di sisi lain, adalah alias untuk variabel lain sehingga mengambil alamat variabel referensi.
- NULL mewakili akhir daftar yang berarti menunjukkan nilai tidak diketahui dan itu menentukan bahwa variabel tidak memiliki ruang alamat yang valid. Nilai NULL dapat diberikan ke variabel penunjuk secara langsung yang menyarankannya tidak menunjuk ke mana pun, sedangkan NULL tidak dapat ditetapkan ke variabel referensi.
Pointer selalu menjadi topik favorit diskusi para programmer C / C ++ sampai referensi muncul. Referensi agak mirip dengan pointer tetapi memiliki bagian yang adil dari pro dan kontra sebagai perbandingan. Meskipun keduanya dapat digunakan untuk mengubah variabel lokal dari satu fungsi di dalam fungsi lain, mereka memiliki perbedaan. Keduanya adalah fitur yang kuat di C dan C ++ yang memungkinkan Anda untuk secara langsung memanipulasi memori, tetapi dengan beberapa pengecualian. Pointer menyimpan alamat memori suatu variabel, sedangkan referensi hanyalah alias untuk variabel lain.