Dasar - Dasar Pointer pada C++
Halo semua, kembali lagi dalam tutorial Dev-C++. Pada tutorial sebelumnya kita telah belajar mengenai fungsi, dan kali ini kita akan membahas mengenai pointer. Tetapi sebelum itu mari kita review kembali sedikit mengenai variabel, dan mengenal apa itu alamat variabel.
Alamat Variabel
Tiap variabel yang dideklarasikan dalam program akan ditempatkan pada bagian tertentu dalam memori komputer. Banyaknya memori (byte) yang ditempati oleh suatu variabel tergantung dari tipe datanya. Pada umumnya variabel bertipe char hanya menempati 1 byte memori, variabel bertipe short menempati 2 byte memori dan lain sebagainya. Tiap byte memori mempunyai alamat sendiri (memory address). Sebagai contoh dideklarasikan variabel berikut ini:
- char huruf;
- short angka;
- int jumlah;
Ilustrasi 1 Penempatan variabel di memori komputer
Untuk lebih jelasnya, perhatikan contoh kode program berikut:
Kode program di atas akan mencetak alamat dari setiap deklarasi variabel pada baris 6, 7, dan 8. Alamat yang akan dicetak tentunya akan menghasilkan hasil yang berbeda - beda tergantung dari tipe variabelnya: jika variabel bertipe char maka akan menghasilkan karakter huruf yaitu 'a', jika tipe variabel untuk angka dan bilangan seperti short, int, long, maka alamat yang dihasilkan akan ditentukan oleh sistem komputer sendiri. Untuk lebih jelasnya, perhatikan hasil kode program berikut:
Dari hasil di atas, dapat kita lihat bahwa alamat dari variabel huruf = a karena bertipe char sehingga mudah mendefinisikannya. Tetapi untuk yang dibawahnya variabel angka dan jumlah di-generate secara otomatis oleh komputer.
*Kalian bisa bereksperimen sendiri dengan mengubah tipe variabel pada kode program dan melihat hasilnya masing - masing.
Variabel Pointer
Variabel Pointer, atau biasa disebut Pointer saja, adalah variabel yang menyimpan alamat memori komputer. Alamat ini umumnya menunjukkan lokasi dari suatu variabel dalam memori komputer (lihat kode program di atas). Karena pointer menyiman alamat memori, maka alamat tersebut dapat dipakai menyimpan data. Dalam hal ini, dapat dikatakan bahwa pointer "menunjuk" kepada data yang menempati suatu alamat memori. Dengan demikian data yang ditunjuk dapat dioperasikan seperti data yang disimpan pada variabel.
Sama seperti variabel lainnya, variabel pointer juga harus dideklarasikan sebelum dapat digunakan. Perhatikan bentuk umum deklarasi variabel pointer berikut:
Tanda bintang (*) menunjukkan variabel yang mendeklarasikan adalah variabel pointer. Cara ini bisa juga dipakai untuk mendeklarasikan variabel pointer seperti berikut:
int *p atau int* p
Perhatikan contoh kode program berikut:
Pada program di atas, vint adalah variabel bertipe integer, point adalah pointer yang menyimpan alamat dari data yang bertipe integer. Perhatikan statement point = &vint pada baris 8. Statement tersebut berarti alamat dari variabel vint disimpan oleh point. Dengan demikian point berisi alamat dari data yang bertipe integer. Atau dengan kata lain, variabel point (baris 8) menunjuk kepada variabel vint (baris 6). Coba perhatikan hasil eksekusi program di atas berikut ini:
Alamat variabel vint menghasilkan angka 0x6ffe04, ini dikarenakan alamat komputer ditulis dengan sistem dalam bentuk hexadesimal, dan sesuai program isi dari variabel point juga sama dengan variabel vint yaitu 0x6ffe04 karena pada program baris 8 point = vint. Lalu data yang ditunjuk variabel point adalah 444 karena pada alamat 0x6ffe04 yang ditunjuk variabel point terdapat data yang berisi angka integer 444, maka dari itu variabel *point mengambil data yang terdapat di dalam alamat tersebut.
Untuk lebih jelas dan mudah dipahami, lihatlah ilustrasi penjelasan tersebut:
Ilustrasi 2 Isi Memori Komputer
Operasi Aritmatika dengan Pointer
Sama seperti tipe variabel lainnya, variabel pointer juga dapat dipakai sebagai operand dalam suatu ekspresi aritmatika. Hal yang perlu diingat adalah, yang dioperasikan adalah data yang alamatnya disimpan dalam variabel pointer, dengan kata lain data yang ditunjuk oleh variabel pointer bukan pointernya. Perhatikan contoh kode program berikut:
Pertama, kita deklarasikan variabel kita seperti biasa dengan variabel x, y, z dengan tipe integer, tentunya variabel pointer p juga dideklrasikan. Untuk mempermudah proses perhitungan dan mengetahui titik start kita kita tulis terlebih dulu isi variabel awal x, y, z.
Nah, mulai pada baris 15 - 22 inilah kita mulai operasikan data - data variabel awal inisialisasi kita. Pertama pada baris 15 variabel p akan menyimpan alamat x, dengan begini variabel p dapat mengakses data pada alamat x. Selanjutnya, data yang ditunjuk oleh p akan dioperasikan, pada baris 16 data tersebut ditambah 100 begitupun juga tahap yang sama dengan variabel y dan z; variabel p akan menyimpan alamat y dan z setelah itu akan dioperasikan. Lihatlah hasil operasi berikut di bawah ini:
Seperti yang kalian lihat hasil di atas, isi ketiga variabel saat inisialisasi dan setelah operasi aritmatika berbeda, ini dikarenakan proses operasi yang dilakukan variabel int *p yang "menunjuk" data pada variabel x, y, dan z lalu mengoperasikannya.
Pointer dan Array
Array juga dapat dianggap sebagai pointer karena menyimpan alamat dari lokasi memori yang ditempati elemen pertama, dengan demikian terdapat hubungan erat antara array dengan pointer. Sebagai contoh, ada sebuah array dideklarasikan angka[4] yang bertipe short int sehingga setiap elemen array menempati 2 lokasi memori seperti gambar berikut:
Ilustrasi 3 Array angka[4]
Pada gambar di atas, dapat dilihat bahwa elemen array disimpan berurutan dalam memori komputer. Dengan demikian alamat dari elemen array angka yang kedua dapat diperoleh dengan:
Alamat angka[2] = Alamat angka[0] + 1*2 byte atau *(angka + 1 * 2 byte)
Karena array angka[] sudah dideklarasikan bertipe short int maka secara otomatis sudah dialokasikan memori berukuran 2 byte untuk setiap elemen angka[], sehingga persamaan di atas dapat ditulis seperti berikut:
Alamat angka[2] = *(angka + 2)
Untuk lebih jelasnya coba lihatlah ilustrasi berikut:
Ilustrasi 4 Array angka[4] dengan pointer
Dengan demikian:
array[indeks] == *(array + indeks)
Perhatikan contoh program array pointer berikut ini:
Program di atas menunjukkan cara - cara yang dapat kita gunakan untuk mendefinisikan elemen - elemen array. Cara - cara yang dapat kita gunakan adalah memasukkan elemen array menggunakan indeks (baris 10), menggunakan pointer (baris 21), dan menggunakan nama array sebagai pointer (baris 35). Saat program dijalankan, akan menghasilkan hasil berikut ini:
Dari hasil di atas, telah terbukti bahwa ketiga cara pada kode program dapat berjalan dengan lancar, dan mendapatkan hasil yang kita inginkan.
Salah satu keistimewaan penggunaan pointer untuk memproses array adalah dapat dilakukan operasi aritmetika terhadap pointer seperti contoh kode program berikut ini:
Untuk lebih jelasnya jika kita ilustrasikan seperti pada Ilustrasi 4 maka akan menjadi seperti ini
angka[0] angka[1] angka[2] angka[3] angka[4]
5 3 6 4 2
*angka *(angka+1) *(angka+2) *(angka+3) *(angka+4)
Selanjutnya untuk menampilkan elemen array dari belakang maka ilustrasinya seperti berikut:
angka[4] angka[3] angka[2] angka[1] angka[0]
2 4 6 3 5
*(angka+4) *(angka+3) *(angka+2) *(angka+1) *(angka)
Dengan begini, semua dapat disimpulkan bahwa pointer dapat menyimpan alamat suatu variabel untuk di"tunjuk" datanya. Pointer juga dapat dipakai untuk operasi perhitungan aritmatika dengan "menunjuk" data yang terdapat pada alamat suatu variabel, dan juga menyusun array.
Demikianlah tutorial mengenai dasar - dasar pointer pada C++. Semoga tutorial ini dapat berguna bagi kalian semua. Selamat belajar dan sampai jumpa pada tutorial berikutnya.
Comments
Post a Comment