Pointer Pada Truktur Data
1 PENGERTIAN POINTER
Pointer (variabel penunjuk) adalah suatu variabel
yang berisi alamat memori dari suatu
variabel lain. Alamat ini merupakan lokasi
dari obyek lain (biasanya variabel lain) di dalam
memori. Contoh, jika sebuah variabel berisi
alamat dari variabel lain, variabel pertama
dikatakan menunjuk ke variabel kedua
Operator Pointer ada dua, yaitu :
Ø Operator &
Operator &
bersifat unary (hanya memerlukan satu operand saja).
Operator &
menghasilkan alamat dari operandnya.
Ø Operator *
Operator *
bersifat unary (hanya memerlukan satu operand saja).
Operator *
menghasilkan nilai yang berada pada sebuah alamat.
2 DEKLARASI POINTER
Seperti halnya
variabel yang lain, variabel pointer juga harus dideklarasikan terlebih dahulu
sebelum digunakan.
Bentuk Umum :
Tipe_data
*nama_pointer;
//Contoh9_1
int *px;
char *sh;
Contoh Program :
#include “IOSTREAM.h”
#include “conio.h”
void main()
{ int x, y; /* x dan y bertipe int */
int *px; /* px pointer yang menunjuk objek */
clrscr();
x = 87;
px = &x; /* px berisi alamat dari x */
y = *px; /* y berisi nilai yang ditunjuk px */
cout<<“Alamat x =”<<&x <<\n”;
cout<<“Isi px = \n”, px);
cout<<“Isi x = \n”, x);
cout<<“Nilai yang ditunjuk oleh px = \n”,
*px);
cout<<“Nilai y = \n”, y);
getch();
}
3 OPERASI POINTER
Ø Operasi Penugasan
Suatu variable
pointer seperti halnya variable yang lain, juga bisa mengalami operasi
penugasan. Nilai dari suatu variable pointer
dapat disalin ke variable pointer yang lain.
//Contoh9_2
#include "iostream.h"
#include "conio.h"
void main()
{ float *x1,y, *x2;
clrscr();
y = 13.45;
x1 = &y;
/* Alamat dari y disalin ke variabel x1 */
x2 = x1; /*
Isi variabel x1 disalin ke variabel x2 */
cout<<"Nilai variabel y = "<
cout<<"Nilai variabel y = "<
getch();
}
Ø Operasi Aritmatika
Suatu variabel
pointer hanya dapat dilakukan operasi aritmatika dengan nilai integer
saja. Operasi yang biasa dilakukan adalah
operasi penambahan dan pengurangan.
Operasi penambahan dengan suatu nilai
menunjukkan lokasi data berikutnya (index
selanjutnya) dalam memori. Begitu juga
operasi pengurangan.
//Contoh9_3
#include
#include
void main()
{ int nilai[3], *penunjuk;
clrscr();
nilai[0] = 125;
nilai[1] = 345;
nilai[2] = 750;
penunjuk = &nilai[0];
cout<<"Nilai "<<*penunjuk
<<" ada di alamat memori "
<
cout<<"Nilai "<<*(penunjuk+1)
<<" ada di alamat memori "
<
cout<<"Nilai "<<*(penunjuk+2)
<<" ada di alamat memori "
<
getch();
}
Ø Operasi Logika
Suatu pointer juga
dapat dikenai operasi logika.
//Contoh9_4
#include
#include "conio.h"
void main()
{ int a = 100, b = 200, *pa, *pb;
clrscr();
pa = &a;
pb = &b;
if(pa < pb)
cout<<"pa menunjuk ke memori lebih rendah
dari pb\n";
if(pa == pb)
cout<<"pa menunjuk ke memori yang sama
dengan pb\n";
if(pa > pb)
cout<<"pa menunjuk ke memori lebih tinggi
dari pb\n";
getch();}
4 POINTER DAN STRING
//Contoh9_5
#include
#include
void misteri1(char
*);
void main() {
char string[] =
"amikom";
cout<<
"String sebelum proses adalah " << string
<<"\n" ;
misteri1(string);
cout<<"String
setelah proses adalah "<
getch();
}
void misteri1(char
*s) {
while ( *s != '\0'
) {
if ( *s >= 'a'
&& *s <= 'z' )
*s -= 32;
++s;
}
}
5 POINTER MENUNJUK SUATU ARRAY
//Contoh9_6
#include "iostream.h"
#include "conio.h"
void main()
{ static int tgl_lahir[] = { 13,9,1982 };
int *ptgl;
ptgl = tgl_lahir; /* ptgl berisi alamat array */
cout<<"Diakses dengan pointer\n";
cout<<"Tanggal = "<<
*ptgl<<"\n";
cout<<"Bulan = "<< *(ptgl + 1)
<<"\n";
cout<<"Tahun = "<<*(ptgl + 2)
<<"\n";
cout<<"\nDiakses dengan array
biasa\n";
cout<<"Tanggal = "<<
tgl_lahir[0] <<"\n";
cout<<"Bulan = "<<
tgl_lahir[1] <<"\n";
cout<<"Tahun = "<<
tgl_lahir[2] <<"\n";
getch();
}
MEMBERI NILAI ARRAY DENGAN POINTER
//contoh9_7
#include "iostream.h"
#include "conio.h"
void main()
{ int x[5], *p, k;
clrscr();
p = x;
x[0] = 5;
x[1] = x[0];
x[2] = *p + 2;
x[3] = *(p+1) - 3;
x[4] = *(x + 2);
for(k=0; k<5; k++)
cout<<"x["<
getch();
}