Advertisements
C++

Belajar C++ #12 : Memahami Konsep Pointer & References

Anak Males – Pengetahuan dan pemahaman mengenai pointer dan references adalah hal yang wajib saat kita sedang belajar C++.

Pointer adalah fitur dari C++ yang di bawa dari bahasa pemrograman C dan tidak dimiliki oleh bahasa pemrograman lain.

Pointer di rancang untuk melakukan alokasikan ruang memori untuk menyimpan nilai tersebut. Kemudian ketika nilai bersangkutan sudah tidak diperlukan lagi, kita bisa membuang ataupun mengalokasikannya kembali.

Dengan menggunakan pointer yang tepat maka akan meningkatkan efisiensi memori dan kecepatan program.

Namun di sisi lain, pointer juga merupakan sebuah fitur yang sangat berbahaya. Karena jika salah dalam penggunaan pointer maka bisa menyebabkan terjadinya kebocoran, bahkan terjadi error lain yang tidak mudah di lacak penyebabnya.

Kemudian fitur lainnya yang sering di kaitkan dengan pointer adalah refrensi, meskipun sebenarnya pointer dan refrensi adalah dua hal yang sangat berbeda.

Dengan menggunakan refrensi kita bisa mengakses suatu nilai tertentu menggunakan beberapa nama.

Memang pada beberapa kasus contohnya ketika melewatkan parameter ke dalam sebuah fungsi, refrensi bisa dijadikan sebagai pengganti pointer.

Refrensi ini adalah fitur tambahan yang ada di C++, bahkan pendahulunya bahasa C tidak mendukung adanya refrensi.

Apa Itu Pointer di C++ ?

Pointer merupakan sebuah variabel atau object yang memang menunjuk pada variabel atau object lainnya. Kita dulu pernah membahas tentang variabel, dimana variabel adalah sebuah representasi dari alamat memori di dalam komputer.

Pointer hanyalah variabel yang menyimpan alamat memori, memori tersebut bisa berasal dari variabel, object dan lain sebagainya.

Dengan menggunakan pointer kita dimungkinkan untuk menunjuk suatu memori, mendapat isi dari memori dan mengubah isi memori yang ditunjuk.

Ada Beberapa Macam Operator di Pointer

Sebelum kita belajar tentang pointer ada dua hal yang perlu kita ketahui. Didalam pointer terdapat dua macam operator yang akan kita gunakan yaitu Address-of (&) dan Dereference operator (*).

Apa itu Address-of (&) dan Dereference operator (*) ? mari kita bahas satu persatu.

Address-of Operator (&)

Address-of Operator adalah operator yang bisa kita gunakan untuk mendapatkan atau melihat alamat memori yang di miliki oleh variabel tersebut.

Untuk menggunakannya, kita hanya perlu meletakan tanda & didepan identitas saat pemanggilan variabel, dan hal tersebut akan membuat compiler memberikan alamat memori bukan isi/nilai dari memori tersebut.

Dereference Operator (*)

Sedangkan Dereference Operator adalah operator yang memungkinkan mendapatkan isi/nilai dari sebuah memori berdasarkan alamat memori.

Cara Membuat Pointer

Setelah kita mengerti fungsi dari dua operator tersebut, sekarang kita bisa membuat pointer dengan menggunakan dua operator diatas.

Untuk penulisan pointer sebagai berikut ini :

int *pInt;
double *pDouble = &myVar;

Pada umumnya pointer sebenarnya adalah variabel, aturan yang di miliki oleh variabel juga berlaku pada pointer, jadi tidak akan jauh jauh dari variabel.

Pointer hanya bisa mendapatkan beberapa perbedaan yaitu penambahan dua operator yang akan membuat variabel menjadi variabel pointer.

Untuk mendirikan sebuah variabel pointer kita hanya menambahkan dereference operator sebelum identitas.

Operator dereference tidak harus melekat pada identitas, operator tersebut juga bisa di letakan setelah tipe data atau di antara tipe data dan identitas.

Dari berbagai cara penulisan ini mempunyai makna yang sama yaitu satu operator dereference hanya akan berlaku pada satu variabel.

Pointer tidak hanya berlaku pada variabel, kita juga dapat melakukanya pada function, objek dan lain-lain. Namun cara implementasi pointer selain pada variabel masih sama seperti kita melakukannya pada variabel.

Cara Mengakses Pointer

Variabel pointer adalah variabel yang mempunyai alamat memori sebagai nilai dari variabel pointer tersebut. Lalu di pointer kita dimungkinkan untuk mengakses nilai pointer itu sendiri dan mengakses nilai dari alamat memori yang ditunjuk oleh pointer.

Pointer merupakan variabel, untuk mengakses pointer tidak jauh beda dengan cara kita mengakses variabel. Dan untuk mengakses nilai dari pointer kita hanya perlu memanggil identitas dari pointer tersebut.

pInt

Pemanggilan ini akan menghasilkan nilai dari pointer yang berupa alamat memori dari variabel yang ditunjuk pada pointer tersebut.

Karena pointer hanya dapat mempunyai nilai berupa memori, untuk mengubah nilai dari pointer atau mengubah tujuan dari pointer kita membutuhkan operator address-of (&) pada operand sumber.

pInt = &myVar

operand sumber akan menghasilkan alamat memori dari myVar, dan hal itu merupakan nilai yang dibutuhkan oleh variabel pointer.

Variabel pointer bisa menyimpan alamat memori bukan berarti kita bisa bebas memberikan alamat memori secara langsung pada pointer.

int *pInt = 0x012345;

Hal tersebut tidak memungkinkan untuk dilakukan.

Karena isi/nilai dari variabel pointer adalah sebuah alamat memori maka untuk mengakses nilai dari variabel yang ditunjuk oleh pointer kita membutuhkan operator dereference (*).

*pInt

Dalam pointer kita dimugkinkan untuk menyalin dan mengubah nilai pada variabel yang ditunjuk oleh pointer.

*pInt = 2

Setiap kita medirikan pointer, pointer itu akan membutuhkan memori. Dan besar memori itu sama pada setiap tipe data yang digunakan. Besar memori dari pointer tergantung pada mesin kompiler. jika kompiler merupakan 32bit maka pointer akan memakan memori sebanyak 4 bytes, Jika menggunakan 64bit maka pointer memakan memori sebanyak 8 bytes.

Apa Itu Reference ?

Reference adalah sebuah fitur yang berasal dari C++ untuk memungkinkan kita untuk membuat variabel yang bisa memegang alamat memori dan berperan layaknya variabel namun sebenarnya adalah alias dari suatu alamat memori, suatu object ataupun suatu variabel.

Ketika kita membuat variabel kita juga memesan sebuah memori. Variabel biasa akan berperan layaknya sebagai pengenal yang memegang alamat dari memori itu secara langsung. Tapi reference adalah variabel yang saat didirikan tidak memesan memori untuk dirinya tapi akan memegang alamat memori dari sebuah memori variabel atau object yang sudah ada.

Dan setelah kita mendirikan variabel reference kita dimungkinkan untuk bebas mengakses nilai dari memori melalui asli atau variabel reference, jadi variabel reference hanyalah sebuah variabel yang berfungsi sebagai alias dari suatu penyimpanan.

Untuk mendirikan variabel reference dibutuhkan tanda ( & ) “Operator Reference”, diletakan sebelum identitas dari variabel.

Untuk contoh penulisan dari reference adalah sebagai berikut :

int &ref = myVar;

di dalam materi pointer kita juga diperkenalkan dengan operator bertanda ( & ) yang bernama “address-of”, meskipun menggunakan tanda yang sama tapi mereka akan berbeda tergantung dimana kita meletakannya.

Jika tanda ( & ) diletakan saat memanggil sebuah variabel maka tanda itu akan berperan sebagai “address-of” tapi jika kita meletakanya saat mendirikan variabel maka akan berperan sebagai “reference”.

Di dalam contoh penulisan diatas, pernyataan mendirikan sebuah variabel reference yang bernama ref akan berfungsi sebagai alias dari variabel myVar. Di dalam variabel ref kita dimungkinkan untuk mengakses memori yang dipegang oleh myVar melalui variabel reference yang bernama ref.

Variabel reference mewajibkan inisialisasi pada saat didirikan dan arah tujuan dari variabel reference tidak bisa diperbaharui. Tujuan (menunjuk) dari variabel reference hanya bisa ditentukan saat mendirikan variabel reference dan tidak akan bisa diperbaharui.

int &myRef; //Error
int &myRef = myVar; //Ok
myRef = &myOtherVar //Error

Reference pada Non-const

Variabel reference non-const hanya dapat memegang atau menunjuk ke variabel non-const, tidak biasa menunjuk atau memegang variabel berkonstanta, ini adalah peraturan yang di buat oleh C++ untuk keamanan program kita.

Jika itu dimungkinkan maka hal itu akan membuat nilai dari variabel konstanta tidak aman (dapat diubah).

Reference pada Const

Untuk mendirikan sebuah variabel reference yang dapat menunjuk ke variabel Konstanta, dibutuhkan variabel reference yang bersifat konstanta.

Kita tidak dimungkinkan untuk mendirikan variabel reference non-const menunjuk ke variabel const, tapi kita dimungkinkan untuk mendirikan variabel reference konstanta menunjuk ke variabel biasa.

Perbedaan Pointer dan Reference

Kita bisa menyimpulkan bahwa pointer dan reference ini mempunyai kemiripan. Kedua hal tersbut memang sama sama bisa merujuk ke sebuah memori dari variabel atau object dan kita bisa menyimpulkan mereka saudaraan tapi berbeda.

  • Penggunaan reference sangat berbeda dari pointer
  • Untuk membuat variabel pointer membutuhkan memori sedangkan variabel reference tidak membutuhkan memori
  • Reference tidak bisa di sertai inisialisasi sedangkan pointer inisialisasi adalah opsional
  • Tujuan yang ditunjukan oleh pointer bisa kita ubah setelah deklarasi sedangkan reference tidak dimungkinkan.

Penutup

Begitulah tutorial C++ untuk pointer dan reference kali ini. Sampai jumpa di tutorial C++ lainnya. babai.

You may also like...

Popular Posts

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *