Perbedaan antara penunjuk dan referensi

Perbedaan antara penunjuk dan referensi

Pointer dan referensi adalah fitur paling kuat di C dan C ++ yang memungkinkan programmer 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 memegang alamat memori dari variabel lain, sedangkan referensi seperti pointer yang dapat digunakan untuk secara tidak langsung merujuk ke variabel lain.

Sebagian besar pemrogram tampaknya mengembangkan beberapa pemahaman tentang kapan harus menggunakan petunjuk dan kapan menggunakan referensi, tetapi mereka sering menemukan masalah yang solusinya tampaknya tidak jelas.

Jadi untuk lebih memahami filosofi, mari kita pahami perbedaan antara keduanya.

Apa itu penunjuk?

Setiap variabel adalah lokasi memori yang ditentukan oleh alamatnya dan dipasangkan dengan pengidentifikasi yang berisi beberapa nilai yang dapat diubah selama program suatu program. Secara sederhana, variabel adalah simbol yang mewakili kuantitas.

Pointer adalah variabel yang berisi alamat memori dari variabel lain. Pointer tidak lain adalah alamat dan variabel yang menyimpan pointer disebut variabel pointer.

Idenya adalah menggunakan pengidentifikasi (atau nama) alih -alih alamat numerik untuk meringankan beban pemrograman sehingga mengurangi kompleksitas program. Karena alamat ini merujuk ke lokasi aktual di memori komputer, pointer dapat digunakan untuk mengakses dan memanipulasi konten yang disimpan dalam memori.

Seperti variabel atau konstan apa pun, pointer harus dinyatakan untuk jenisnya. Karena pointer berisi alamat memori yang dimiliki oleh tipe data yang terpisah, mereka harus dinyatakan menggunakan pointer sebelum Anda dapat bekerja dengannya. Bentuk umum deklarasi pointer adalah:

Data_type * var-nama;

Di sini, "data_type" adalah jenis 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 ditetapkan sebagai pointer ke variabel titik mengambang.

Apa itu referensi?

Referensi seperti pointer dengan akses tidak langsung ke variabel. Ini seperti alias untuk variabel lain, artinya itu hanya nama lain untuk variabel yang sudah ada.

Ini memungkinkan pemrogram 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-referensi bertindak sebagai fungsi parameter formal dan setelah didefinisikan untuk merujuk ke variabel, itu tidak dapat diulang yang berarti tidak dapat dirujuk ke variabel lain.

Tidak seperti pointer, mereka tidak membutuhkan operator dereferencing untuk mengakses nilai; Faktanya, mereka dapat digunakan seperti variabel normal.

int i;

int & ri = i;

Di sini, "RI" adalah referensi integer yang diinisialisasi ke "i". Itu menyatakan "ri" sebagai objek tipe "referensi ke int". Referensi dapat dengan mudah dikacaukan dengan pointer yang merupakan variabel independen, nilai alamatnya tidak dapat dipindahkan setelah dibuat.

Perbedaan antara penunjuk dan referensi

  1. Dasar -dasar penunjuk dan referensi

- Keduanya memberikan kemampuan yang hampir serupa dalam hal kegunaan dan perbedaannya bisa rumit. Pointer hanyalah variabel yang menyimpan alamat memori dari variabel lain, sedangkan referensi seperti alias untuk variabel yang sudah ada. Ini membuat nama kedua untuk variabel yang dapat digunakan untuk memodifikasi konten yang disimpan dalam variabel itu.

  1. Deklarasi penunjuk dan referensi

- Pointer seperti variabel lain yang menyimpan sepotong data. Tidak seperti variabel lain, variabel pointer menyimpan alamat memori alih -alih nilai. Pointer diereferping menggunakan operator tidak langsung * untuk mengakses lokasi memori variabel yang ditunjuk. Referensi, di sisi lain, tidak memerlukan operator dereferencing untuk mengakses nilai.

  1. Penugasan kembali penunjuk dan referensi

- 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.

  1. Alamat memori untuk penunjuk dan referensi

- Variabel pointer memiliki lokasi sendiri dalam 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.

  1. Nilai nol untuk penunjuk dan referensi

- NULL mewakili akhir dari daftar yang berarti menunjukkan nilai tidak diketahui dan menentukan bahwa variabel tidak memiliki ruang alamat yang valid. Nilai nol dapat ditetapkan ke variabel pointer secara langsung yang menunjukkan itu tidak mengarah ke mana pun, sedangkan nol tidak dapat ditetapkan ke variabel referensi.

Pointer vs. Referensi: Bagan Perbandingan

Ringkasan Pointer VS. Referensi

Pointer selalu menjadi salah satu topik favorit diskusi programmer C/C ++ sampai referensi datang ke gambar. Referensi agak mirip dengan pointer tetapi memiliki bagian pro dan kontra yang adil dibandingkan. Meskipun keduanya dapat digunakan untuk mengubah variabel lokal dari satu fungsi dalam fungsi lain, mereka memiliki perbedaan. Keduanya adalah fitur yang kuat di C dan C ++ yang memungkinkan Anda memanipulasi memori secara langsung, tetapi dengan beberapa pengecualian. Pointer memegang alamat memori variabel, sedangkan referensi hanyalah alias untuk variabel lain.