Pointer dan Referensi pada bahasa C++

Pada tutorial sebelumnya kita telah mempelajari tentang fungsi dan fungsi rekursif. pada tutorial kali ini kita akan mempelajari tentang pointer dan referensi pada bahasa C++. Pada tutorial sebelumnya saya menggabungkan tutorial bahasa C++ dengan bahasa C, namun kali ini saya akan memberikan tutorial hanya dalam bahasa C++. Hal tersebut dikarenakan saya ingin artikel tutorial yang saya buat agar dapat terfokus pada satu pembahasan saja dan tidak terlalu dipusingkan dengan perbedaan dari dua bahasa ini. Pada tutorial Pointer dan referensi kali ini kita akan belajar tentang apa itu pointer dan referensi ?. Dan yang paling penting penggunaan dari pointer dan referensi pada bahasa C++. Pointer dan referensi adalah fitur hebat dari bahasa C++, akan tetapi bersamaan dengan kehebatannya, pointer dan referensi juga memiliki potensi untuk membuat kalian pusing apabila tidak digunakan dengan benar. Karena pointer dan referensi dapat memberikan anda runtime error dan bug yang sulit untuk didebug.

alien Pointer meme

penggunaan pointer yang salah dapat menjadi alasan utama program kalian error ketika berjalan.

Pointer

Apa itu pointer?

Ilustrasi dari pointer

Gambar diambil dari buku beginning C++ oleh Ivor Horton

Setiap variabel dan fungsi didalam program kita pasti akan disimpan di lokasi tertentu dalam memori, dan setiap variabel tersebut memiliki alamat yang berbeda satu sama lain. Alamat ini akan selalu berubah selama program berjalan. Pointer adalah variabel yang dapat menyimpan alamat dari suatu fungsi ataupun variabel(pointer juga variabel jadi pointer bisa menunjuk pointer lain).

Pointer dapat menunjuk pointer lain meme

Pointer menunjuk pointer lain? why not?

Akan tetapi pointer tidak hanya menyimpan alamat dari suatu variabel saja, pointer juga menyimpan tipe data dari variabel yang akan ditunjuknya. Jadi untuk menunjuk variabel ataupun fungsi dengan pointer kita harus tau tipe data nya.

Pendeklarasian Pointer

Cara membuat pointer pada bahasa C++ adalah sebagai berikut : <tipe data>* <Nama variabel>; Perlu diperhatikan lambang bintang atau asterisk (*) berarti yang kita deklarasikan bukanlah variabel biasa, akan tetapi pointer dari suatu variabel. Contohnya jika saya ingin membuat pointer ke variabel bertipe double dengan nama ptrNilai, jadi saya dapat menuliskan double* ptrNilai; maka akan tercipta variabel bernama ptrNilai yang berjenis pointer to double atau pointer dari variabel berjenis double. Sangat dianjurkan untuk membuat pointer dengan nilai inisialisasi awalnya berupa nullptr yang berarti tidak menunjuk ke apa-apa, pointer yang tidak diinisialisasi lebih berbahaya dari variabel biasa. Untuk membuat pointer dengan inisialisasi awal nullptr dapat dilakukan dengan cara. double* ptrNilai=nullptr;
*catatan : nullptr memiliki tipe data std:nullptr_t yang didefinisikan di header cstddef

Menyimpan alamat suatu variabel ke pointer

Seperti yang dibahas sebelumnya pointer adalah variabel yang dapat menyimpan alamat dari suatu fungsi ataupun variabel, maka kita dapat menyimpan alamat dari suatu variabel ke pointer. Untuk menyimpan alamat suatu variabel ke pointer kita perlu operator untuk memberikan alamat dari variabel tersebut yaitu ampersand (&). Jadi jika kita membaut variabel double nilai; maka untuk mendapatkan alamat dari variabel tersebut kita tinggal lakukan &nilai; maka statement tersebut akan memberikan alamat dari variabel nilai. Kode lengkap nya adalah sebagai berikut:

double nilai=9.56;
double* ptrNilai;

ptrNilai=&nilai;

Potongan kode diatas akan menghasilkan pointer ptrNilai yang didalamnya menyimpan alamat dari variabel nilai yang bertipe double.

Mengembalikan nilai variabel yang ditunjuk oleh pointer

Pada potongan kode sebelumnya kita telah memiliki ptrNilai yang menunjuk variabel nilai. Jika kita ingin mengeluarkan nilai dari variabel yang ditunjuk oleh pointer ptrNilai kita tidak dapat mengoutputkannya langsung dengan cout<<ptrNilai<<endl; karena seperti yang dibahas sebelumnya bahwa pointer menyimpan alamat dari suatu variabel, maka statement tersebut akan menampilkan alamat yang disimpan di ptrNilai yaitu alamat dari variabel nilai. Untuk mengeluarkan nilai dari variabel yang ditunjuk oleh ptrNilai kita membutuhkan operator indirection yaitu asterisk(*). Jadi statement nya menjadi: cout<<*ptrNilai<<endl;

Aritmatika pada pointer

Layaknya variabel biasa kita dapat melakukan operasi aritmatika pada pointer,yang sering digunakan adalah:

  • ++ : me-increment alamat yang ditunjuk pointer dengan besarnya tipe data yang ditunjuk pointer pada memori.
  • —  : me-decrement alamat yang ditunjuk pointer dengan besarnya tipe data yang ditunjuk pointer pada memori.

Artimatika pada pointer

Referensi

Apa itu referensi pada C++

Referensi nampak sama dengan pointer pada beberapa hal. Referensi digunakan untuk memberi alias pada variabel. Kita dapat membuat referensi dengan cara <tipe data>& <Nama variabel>=<variabel yang direferensi>, perlu diperhatikan bahwa kita menggunakan tanda ampersand untuk membuat referensi, dan tiap referensi harus sudah ditentukan variabel yang direferensi. berbeda dengan pointer, ketika kita telah memberi alias ke suatu variabel maka kita tidak bisa mengganti alias tersebut untuk mengaliaskan variabel lain. Dengan menggunakan referensi kita dapat membuat alias dari suatu variabel, jadi jika kita memanipulasi alias tersebut maka nilai variabel aslinya akan berubah contohnya:

Kita memiliki variabel nilai bertipe double dan refNilai sebagai alias/referensi dari variabel nilai

double nilai=9.56;
double& refNilai=nilai;

Maka jika kita melakukan

refNilai=10.0;

nilai dari variabel nilai juga akan berubah.

Penggunaan pointer dan referensi:
Dengan adanya pointer dan referensi kita dapat melakukan banyak hal, contohnya :

  • Mengoprasikan data yang disimpan didalam array.
  • Mengoprasikan data yang disimpan didalam array.
  • Pointer memungkinkan kita untuk mengalokasikan memori untuk variabel dinamis yang akan dibahas dengan artikel tutorial sendiri.
  • Struktur data berjenis linkedlist memanfaatkan pointer didalamnya
  • Penggunaan pointer dan referensi memungkinkan kita membuat fungsi yang pass by reference
  • Penggunaan pointer dan referensi memungkinkan konsep OOP yang bernama polymorphism untuk dilakukan di C++
  • Penggunaan pointer ataupun referensi suatu fungsi memungkinkan konsep callback yang sangat berguna di program yang bersifat asynchronous

Sekian tutorial kali ini jika kalian memiliki saran atau pertanyaan silahkan berkomentar.
HAPPY CODING

sumber:
Ivor Horton, Begining C++, Apress

No Responses

Leave a Reply