[ Tugas Kuliah ] Algoritma dan Pemograman II
"POINTER"
POINTER
A.
Konsep
Dasar Pointer
Variabel pointer sering dikatakan sebagai variabel
yang menunjuk ke obyek lain. Pada
kenyataan yang sebenarnya, variabel pointer berisi alamat dari suatu obyek lain
(yaitu obyek yang dikatakan ditunjuk oleh pointer).
Pointer berisi alamat dari suatu data, bukan data
seperti pada variabel. Variabel disimpan
dalam memori, dan akan ditempatkan pada alamat tertentu. Pointer dalam program
digunakan untuk menunjuk ke suatu alamat memori. Pointer adalah sebuah
variabel yang berisi
alamat lain. Suatu
pointer dimaksudkan untu
menunjukan ke suatu
alamat memori sehingga
alamat dari suatu
variabel dapat diketahui dengan mudah.
Keunggulan Menggunakan Pointer :
1. Penanganan
terhadap array dan string akan lebih singkat dan efisien.
2. Memungkinkan
suatu fungsi untuk menghasulkan lebih dari satu nilai.
3. Memiliki
kemampuan untuk mengirimkan alamat suatu fungsi ke fungsi yang lain.
4. Kemampuan
berkerja dengan memori yang telah dialokasikan secara dinamik.
5. Memungkinkan
untuk berhubungan langsung ke hardware.
6. Untuk
menciptakan data structure yang kompleks
7. Memungkinkan
untuk berhubungan langsung dengan parameter command line.
Dengan
menggunakan pointer yang
benar, anda dapat
menyusun sebuah program yang berkemampuan tinggi. Sebaliknya
sedikit saja kesalahan dalam menggunakan pointer akan
mengakibatkan kesalahan fatal pada program anda. Karena pointer dapat langsung menunjukan
pada lokasi memori,
jika lokasi yang
ditunjuk salah, berarti data
yang diambil juga akan salah, dan
sudah tentu program anda akan menjadi salah juga.
Selain itu, Pointer adalah sebuah variabel yang
berisikan alamat memori (bukan nilai) atau dengan kata lain dapat dikatakan
bahwa pointer adalah suatu variabel penunjuk ke alamat memori tertentu. Cara
pendeklarasian pointer dalam bahasa C adalah dengan menambakan tanda asterisk
(*) didepan nama pointer, seperti berikut:
Tipe_data
*nama_pointer; atau Tipe_data*
nama_pointer;
|
Keterangan
:
1.
Tipe_data
dapat berupa sembarang tipe seperti halnya pendefinisian variabel.
2. Nama_pointer
adalah nama variabel pointer yang akan digunakan. * adalah operator memori
untuk mengembalikan nilai variabel pada alamatnya yang ditentukan oleh operand.
Contoh: int *pint; atau int* pint; char *pchr; atau char* pchr;
B.
Mendeklarasikan
Variabel Pointer
Suatu variabel pointer
dideklarasikan dengan bentuk sebagai berikut :
tipe
*nama_variabel
|
Dengan tipe dapat berupa sembarang tipe yang sudah
dibahas pada bab-bab sebelumnya, maupun bab-bab berikutnya. Adapun nama_variabel adalah nama dari
variabel pointer.
Contoh :
int *px; / *contoh 1 */ char *pch1, *pch2; / *contoh 2 */
|
Contoh pertama menyatakan bahwa px adalah variabel
pointer yang menunjuk ke suatu data bertipe int, sedangkan contoh kedua masing
pch1 dan pch2 adalah variabel pointer yang menunjuk ke data bertipe char.
C.
Mengatur Pointer agar Menunjuk ke Variabel
Lain
Agar suatu pointer
menunjuk ke variabel lain, mula-mula pointer harus diisi dengan alamat dari
variabel yang akan ditunjuk. Untuk
menyatakan alamat dari suatu variabel, operator & (operator alamat,
bersifat unary) bisa dipergunakan, dengan menempatkannya di depan nama
variabel. Sebagai contoh, bila x
dideklarasikan sebagai variabel bertipe int, maka :
&x
|
Keterangan :
“alamat dari variabel x”. Adapun contoh pemberian alamat x ke suatu
variabel pointer px (yang dideklarasikan sebagai pointer yang menunjuk ke data
bertipe int).
Pernyataan di atas berarti bahwa px diberi nilai berupa
alamat dari variabel x. Setelah pernyataan tersebut dieksekusi barulah dapat
dikatakan bahwa px menunjuk ke variabel x.
D.
Mengakses
Isi Suatu Variabel Melalui Pointer
Jika suatu
variabel sudah ditunjuk oleh pointer, variabel yang ditunjuk oleh pointer
tersebut dapat diakses melalui variabel itu sendiri (pengaksesan langsung)
ataupun melalui pointer (pengaksesan tak langsung). Pengaksesan tak langsung dilakukan dengan menggunakan
operator indirection (tak langsung) berupa simbol * (bersifat unary). Contoh penerapan operator * yaitu :
*px
|
Yang menyatakan “isi atau nilai variabel/data yang
ditunjuk oleh pointer px” . Sebagai
contoh jika y bertipe int, maka sesudah dua pernyataan berikut :
px = &x; y = *px;
|
y akan berisi nilai yang
sama dengan nilai x.
E.
Mengakses
dan Mengubah isi Suatu Variabel Pointer
Contoh berikut
memberikan gambaran tentang pengubahan isi suatu variabel secara tak langsung (yaitu
melalui pointer). Mula-mula pd dideklarasikan sebagai pointer yang menunjuk ke
suatu data bertipe float dan d sebagai variabel bertipe float.
d
= 54.5;
|
Digunakan untuk mengisikan nilai 54,5 secara
langsung ke variabel d.
Adapun
:
pd = &d;
|
Digunakan
untuk memberikan alamat dari d ke pd. Dengan demikian pd menunjuk ke variabel d. Sedangkan pernyataan
berikutnya :
*pd = *pd + 10; (atau: *pd += 10; )
|
Merupakan
instruksi untuk mengubah nilai variabel d secara tak langsung. Perintah di atas
berarti “jumlahkan yang ditunjuk pd dengan 10 kemudian berikan ke yang ditunjuk
oleh pd”, atau identik dengan pernyataan :
d
= d + 10;
|
Akan tetapi, seandainya
tidak ada instruksi
pd = &d;
|
maka pernyataan :
*pd
= *pd + 10;
|
tidaklah sama dengan :
d = d + 10;
|
F. Pointer dan Array (pointer to array)
Hubungan antara pointer dan array pada C sangatlah erat. Sebab sesungguhnya
array secara internal akan diterjemahkan dalam bentuk pointer. Pembahasan
berikut akan memberikan gambaran hubungan antara pointer dan array. Misalnya
dideklarasikan di dalam suatu fungsi :
static
int tgl_lahir[3] = { 01, 09, 64 };
|
G. Array dari Pointer (Array of Pointer)
Suatu
array bisa digunakan untuk menyimpan sejumlah pointer. Sebagai contoh: char
*namahari[10]; merupakan pernyataan
untuk mendeklarasikan array pointer. Array namahari terdiri dari 10 elemen
berupa pointer yang menunjuk ke data bertipe char.
H. Pointer dalam Fungsi
Pointer
dan kaitannya dengan fungsi yang akan dibahas berikut meliputi :
1. Pointer
sebagai parameter fungsi.
2. Pointer
sebagai keluaran fungsi.
I.
KESIMPULAN
1. Tipe
variabel pointer adalah tipe variabel yang berisi alamat dari variabel yang
sebenarnya.
2. Tipe
variabel pointer harus sama dengan tipe varibel yang ditunjuk.
3. Hubungan
antara pointer dan array pada C
sangatlah erat, sebab sesungguhnya array secara internal akan diterjemahkan
dalam bentuk pointer .
4. Varibel
pointer bisa berupa string, array atau tipe variabel yang lainnya.
5. Suatu
pointer bisa saja menunjuk ke pointer lain (pointer to pointer).
Sumber :
1. http://yuliana.lecturer.pens.ac.id/Konsep%20Pemrograman/Teori/T12-Pointer(1).pdf