Pointer merupakan suatu variabel yang ditugaskan untuk menampung alamat(address) dari variabel lain.
Sebelum menampung alamat dari variabel lain, terlebih dahulu variabel pointer akan menunjuk variabel mana yang alamatnya akan disimpan.
. . .
Masihkah ingat apa yang dimaksud dengan alamat.?
Kita ulas kembali sedikit mengenai alamat.
Alamat disimbolkan dengan tanda &
(ampersand) merupakan kode unik didalam memori yang berfungsi untuk mengindentifikasi data-data yang ada didalam komputer.
Antar satu data dengan data yang lain memiliki alamat yang berbeda-beda.
Data-data yang dimaksud disini merupakan sebuah variabel, konstanta, atau sebuah nilai.
Jadi, pada saat kita mendeklarasikan sebuah variabel, maka variabel tersebut secara otomatis akan menempati sebuah alamat yang ada didalam memori komputer.
Alamat ini dapat kita jadikan pemisalam sebagai berikut.
Misal, kita mempunyai rumah, rumah yang kita tempati berada pada alamat Jl. bung tomo no.7.
Rumah pada pemisalan diatas merupakan sebuah data, sedangkan Jl. bung tomo no.7, merupakan alamat dimana data tersebut disimpan.
Jadi, ketika kita menggunakan variabel pointer, maka yang diakses merupakan alamatnya.
Metode pengaksesan seperti ini disebut sebagai akses INDIRECT (Pengaksesan secara tidak langsung).
Pengaksesan secara INDIRECT ini merupakan pengaksesan lewat sebuah perantara, dalam hal ini perantara yang digunakan yaitu alamat.
Deklarasi Pointer
Variabel pointer dideklarasikan dengan tanda *
(asterisk).
Tanda asterisk menyatakan bahwa, variabel tersebut merupakan variabel pointer, yang digunakan untuk menunjuk serta menampung alamat dari variabel lain.
Berikut merupakan syntax penulisannya:
tipeData* namaVar; // Contoh int* pt;
Variabel *pt
pada contoh diatas, bertipe pointer to integer, yang artinya bahwa variabel pointer pt
merupakan variabel yang ditugaskan untuk menunjuk alamat variabel lain yang bertipe sama, yaitu integer.
Lalu, bagaimana jika variabel pointer yang bertipe integer menunjuk variabel lain yang tipenya tidak sama?, misal variabel pointer bertipe integer menunjuk variabel lain yang bertipe char.
Maka, yang jelas akan terjadi error!.
Akses Lewat Pointer
Setelah variabel pointer berhasil kita deklarasikan, maka kita dapat memerintahkan variabel tersebut untuk menjalankan tugasnya.
Perhatikan program berikut.
#include <stdio.h>
int main(){ int* pt; int a = 10; pt =& a; /* Variabel pointer pt menampung alamat dari variabel a Pada saat assign nilai, variabel pointer tidak perlu memakai tanda asterisk (*) */ printf("Nilai var pt : %d\n",* pt); return 0; }
Pada program diatas, kita meng-assign alamat dari variabel a
kedalam variabel pointer pt
.
Yang berarti bahwa variabel pointer pt
ditugaskan untuk menampung alamat dari variabel a
.
Ketika alamat dari variabel a
sudah berhasil ditunjuk, Maka nilai dari varibel a
bisa diakses oleh pointer tersebut.
Maka, akan menghasilkan output.
Misal, jika nilai variabel a
kita ubah, apakah hasil dari variabel pt
juga ikut berubah??.
...
Yang jelas ikut berubah.
Mengapa demikian..
Perlu kita ingat kembali bahwa, jika yang kita akses itu merupakan sebuah alamat, maka meskipun data / variabel yang ada didalam alamat tersebut kita ubah-ubah, Alamat akan mengikuti perubahan data / variabel tersebut.
Dan satu hal lagi, Bahwasannya variabel merupakan pembungkus sebuah nilai.
. . .
Perhatikan program berikut.
#include <stdio.h>
int main(){ int* pt; int a = 10; pt =& a; printf("Nilai var pt : %d\n",* pt); a = 20; printf("Nilai var pt : %d\n",* pt); return 0; }
Variabel a
mula-mula bernilai 10
, Lalu alamat dari variabel a
kita assign kedalam pointer pt
.
Kita tampilkan hasilnya kelayar.
Selanjutnya kita ganti nilai dari variabel a
menjadi 20
.
Maka, ketika pointer pt
kita panggil didalam fungsi printf()
, akan menampilkan Hasil.
Nilai dari varibel pt
berubah menjadi 20
.
Perhatikan kembali program berikut.
#include <stdio.h>
int main(){ int* pt; int a = 10; int b; pt =& a; b =* pt; printf("Nilai var a : %d\n", a); printf("Nilai var b : %d\n", b); printf("Nilai var pt : %d\n",* pt); return 0; }
Pada program diatas, kita ingin menjadikan nilai variabel b
sama dengan nilai dari variabel a
.
Pertama, variabel pointer pt
menunjuk alamat dari variabel a
, agar isi yang ada didalamnya bisa diakses dan juga bisa ditampung.
Ketika pointer pt
telah berhasil menampung alamat beserta isinya dari variabel a
, selanjutnya kita assign pointer pt
kedalam variabel b
.
Maka akan menghasilkan output.
Cara diatas, sama saja halnya dengan ..
#include <stdio.h>
int main(){ int a = 10; int b; b = a; // Akses secara langsung / DIRECT printf("Nilai var a : %d\n", a); printf("Nilai var b : %d\n", b); return 0; }
Lalu, kenapa kita harus susah-susah menggunakan pointer untuk mengakses variabel?
Disinilah perbedaan antara Akses secara langsung / DIRECT, dengan Akses secara tidak langsung / INDIRECT.
Lalu, Apa saja kelebihan yang didapat dengan menggunakan Akses secara INDIRECT ini?
- Efisiensi: Akses secara indirect dapat lebih efisien daripada akses secara langsung, karena pointer tidak perlu dikonversi menjadi alamat memori terlebih dahulu.
- Fleksibilitas: Akses secara indirect dapat lebih fleksibel daripada akses secara langsung, karena pointer dapat digunakan untuk mengakses variabel yang berada di memori manapun.
- Kekuatan: Akses secara indirect dapat lebih kuat daripada akses langsung, karena pointer dapat digunakan untuk mengakses variabel yang tidak diketahui namanya, atau yang berada di luar ruang alamat lokal.
Materi tentang pointer ini, akan banyak kalian temui pada Algoritma dan Struktur Data, yang menurut banyak pihak merupakan materi yang lumayan sulit didalam pemrograman.. 😄
. . .
Masing-masing variabel yang kita deklarasikan didalam program, kesemuanya memiliki alamat memorinya masing-masing.
Berikut cara mengetahuinya.
#include <stdio.h>
int main(){ int* pt1,* pt2; int a, b; char x, y; printf("Alamat var *pt1 : %p\n",& pt1 ); // %p (pointer) merupakan format untuk mencetak alamat memori printf("Alamat var *pt2 : %p\n",& pt2 ); printf("Alamat var a : %p\n",& a ); printf("Alamat var b : %p\n",& b ); printf("Alamat var x : %p\n",& x ); printf("Alamat var y : %p\n",& y ); return 0; }
Beda Kompiler dari yang kita gunakan, akan menampilkan hasil yang berbeda-beda pula.
Itulah tadi penjelasan Awal mengenai konsep dari pointer dan cara kerjanya. Pada saat awal-awal mempelajari materi ini, memang terasa susah dan membingungkan. Namun, dengan banyak berlatih dan terus mencoba seiring berjalannya waktu akan dapat dengan mudah dipahami.
Post a Comment
Post a Comment