POINTER
Tim Alpro
Teknik Informatika
Pointer
• Pointer adalah variable yang berisi alamatmemori sebagai nilainya.
• Pointer salah satu keunggulan dari bahasa C.
• Komputer mengalokasikan sebuah area padamemori ketika sebuah variabel dideklarasikan.
• Area tersebut diacu dengan menggunakansebuah variabel dalam program, namun ketikaprogram di-compile dan berjalan, komputermengacu area tersebut dengan menggunakanalamat atau lokasi dari memori.
Contoh Variabel
• Perhatikan contoh berikut:
int angka = 50;
• Dalam hal ini, area pada memoridialokasikan untuk menyimpan nilai integer. Memori tersebut dapat diakses denganmenggunakan nama angka.
Alamat
• Komputer mengacu kepada area memoridengan menggunakan sebuah alamat.
• Alamat rinci dari data yang disimpanbergantung kepada jenis komputer, sistemoperasi, dan compiler yang digunakan.
• Jadi, meskipun nama variabel yangdigunakan adalah tetap (fixed), alamatdari variabel yang digunakan akanberbeda pada sistem yang berbeda.
Pointer & Alamat
• Variabel yang dapat menyimpan alamat disebut‘pointer’, dan alamat yang disimpan dalampointer berisi nilai variabel lain
Karakteristik Pointer
• Hal penting yang harus diketahui adalah, compilerharus tahu jenis dari data yang disimpan dalamvariabel yang diacu oleh pointer.
• Sehingga dapat diketahui jumlah memori yangakan dialokasikan atau bagaimana cara untukmenangani isi dari memori yang diacu oleh pointer.
• Sebuah pointer pada sebuah variabel charmengacu pada nilai dengan alokasi sebesar 1Byte,sedangkan sebuah pointer pada variabel intbiasanya mengalokasikan 4Byte.
Karakteristik Pointer
• Setiap pointer akan dihubungkan denganjenis variabel tertentu, dan hanya bisadigunakan untuk mengacu jenis variabeltersebut.
• Sehingga pointer berjenis ‘pointer to int’hanya dapat mengacu pada variabelberjenis int, dsb. Secara umum sebuahpointer dari type tertentu ditulis dengantype* untuk setiap nama type
Deklarasi Pointer
• Bentuk umum deklarasi pointer:
Tipe *Nama-variabel-pointer;
– Tipe : tipe data pointer
– Nama-variabel-pointer: nama variabel pointer
– * : operator memori untuk mengembalikan nilaivariabel pada alamatnya
• Contoh pointer sebuah variabel berjenis int :
int *almt;
• Variabel tersebut dapat menyimpan alamatdari variabel apapun yang berjenis int.
Inisialisasi Pointer
• Pointer yang tidak diinisialisasi sangatlahberbahaya, lebih berbahaya dari variabelbiasa yang tidak diinisialisasi. Jadi, sebaiknyaselalu lakukan inisialisasi pointer ketikadideklarasikan. Kita dapat menginisialisasipointer almt sehingga tidak mengacukemanapun:
int *almt = NULL;
Null Pointer
• NULL adalah sebuah konstanta dalamstandard library dan setara dengan nilai 0untuk sebuah pointer.
• NULL memastikan sebuah pointer tidakmengacu ke lokasi manapun dalammemori.
• Hal tersebut dimaksudkan untukmenghindari penimpaan (overwriting)memori.
Operator
• Bahasa C menyediakan 2 operator untuk operasipointer yaitu operator ‘*’ serta operator ‘&’.
• Operator alamat atau address of ‘&’ digunakanuntuk mendapatkan alamat memori darioperandnya.
&almt -> address
• Operator unary ‘*’ digunakan untukmendapatkan nilai dari operandnya
*almt -> value
Penggunaan Operator
• Jika ingin menginisialisasi variabel almt denganalamat dari variabel yang telah dideklarasikan, kitadapat menggunakan operator address of ‘&’:
int angka = 50;
int *almt = &angka;
• Nilai awal dari almt adalah alamat dari variabelangka.
• Perlu diingat bahwa deklarasi dari angka harusdilakukan terlebih dahulu sebelum deklarasi daripointer yang akan digunakan untuk menyimpanalamat tersebut.
int var = *almt;
• Nilai var adalah 50.
Deklarasi Pointer dan Variabel
• Tidak ada pendeklarasian khusus dari pointer. Kitadapat mendeklarasikan variabel biasa dan pointerdalam satu pernyataan:
double nilai, *lokasi, abc;
• Pernyataan tersebut mendeklarasikan dua variabeljenis double-precision floating-point yaitu nilai
dan abc, dan sebuah variabel *lokasi yang
berjenis pointer to double
Pointer VS Variabel
• Perhatikan contoh lain berikut ini:
int *p, q;
• Pernyataan tersebut mendeklarasikan pointer pberjenis int*, dan sebuah variabel q yang berjenisint.
• Kesalahan umum yang sering terjadi adalah denganmenganggap variabel p dan q adalah pointer
Contoh Deklarasi Pointer
• Indirection operator * digunakan untuk mengaksesnilai dari variabel yang diacu oleh pointer.
• Operator tersebut dikenal juga sebagai dereference operator karena digunakan untuk men-dereference sebuah pointer.
• Perhatikan deklarasi variabel-variabel berikut:
int angka = 20;
int *pntr = &angka;
int hasil = 0;
Mengakses Nilai Melalui Pointer
• Variabel pntr menampung alamat dari variabel angka,
sehingga kita dapat menggunakan ekspresi berikutuntuk menghitung nilai yang baru dari variabel hasil:
hasil = *pntr + 5;
• Ekspresi *pntr akan mengevaluasi nilai yang terdapat
pada alamat di dalam pointer pntr.
• Nilai yang tersimpan pada variabel angka adalah 20,sehingga nilai hasil akan menjadi 20 + 5 yaitu 25.
Latihan
• Deklarasi var X, Y, Z, pointer Alamat_X dengantipe char
• Nilai var X adalah J
• Isikan nilai var X ke var Y
• Mengisi pointer Alamat_X dengan alamatmemori var X
• Mengisi nilai dalam pointer Alamat_X ke var Z
• Tampilkan nilai var X, Y, Z
char *Alamat_X,X,Y,Z;
X=’J’;
Y = X;
Alamat_X = &X;
Z = *Alamat_X;
printf(“Nilai variabel X adalah %c\n”, X);
printf(“Nilai variabel Y adalah %c\n”, Y);
printf(“Nilai variabel Z adalah %c\n”, Z);
Array & Pointer
• Pointer pada array memerintahkan pointer agar menunjuk ke alamat yang telahdialokasikan oleh array tersebut.
• Definisi pointer:int *P;
• kemudian kita tunjuk ke alamat Array AP = &A[0];
• P akan menunjuk alamat pertama Array
Array
• Deklarasi arrayint A[10];
• Kita memerintahkan compiler untukmenyediakan alamat memori sebesar
10 * sizeof(int).
• Bila ukuran int adalah 4 byte, makacompiler akan mengalokasikan sebesar 10 * 4 byte = 40 byte memori untuk A.
Malloc()
• Fungsi untuk mengalokasikan memori
• Prototipe void * malloc(size_n)
• Fungsi malloc() akan mengembalikan pointer kesejumlah n byte ruang memory yang belumdiinisialisasi. Apabila tidak terpenuhi, maka fungsi iniakan mengembalikan nilai NULL.
• Deklarasi
int array[10];
int *p;
p = (int *) malloc(10 * sizeof(int));
Operasi Pointer - Assignment
• Nilai suatu variabel pointer dapatdipindahkan ke variabel pointer yang lain
• Contohfloat Y, *X1, *X2;
Y = 12.34;
X1 = &Y;
X2 = X1; /*assignment variabel pointer*/
printf(“Nilai variabel Y ada di alamat %p\n”, X1);
printf(“Nilai variabel Y ada di alamat %p\n”, X2);
Nilai variabel Y ada di alamat FFDANilai variabel Y ada di alamat FFDA
Operasi Pointer - Aritmatika
• Suatu variabel pointer dapat ditambah ataudikurangi dengan suatu nilai integer
• Operasi penambahan pointer dengan suatu nilaiinteger merupakan suatu peningkatan nilaipointer yang menunjukkan lokasi nilai data berikutnya (bukan byte berikutnya) di memori.
Operasi Pointer - Aritmatika
• Contohint Nilai1,Nilai2,Nilai3, *Penunjuk;
Nilai1 = 123;
Nilai2 = 345;
Nilai3 = 678;
Penunjuk = &Nilai1;
printf(“Nilai %d di alamat memori %p\n”, *Penunjuk, Penunjuk);
printf(“Nilai %d di alamat memori %p\n”, *(Penunjuk+1),
Penunjuk+1);
printf(“Nilai %d di alamat memori %p\n”, *(Penunjuk+2),
Penunjuk+2);
Nilai 123 di alamat memori 1000Nilai 345 di alamat memori 1002Nilai 678 di alamat memori 1004
Operasi Pointer -Logika
• Nilai suatu variabel pointer dapatdipindahkan ke variabel pointer yang lain
• Contohint Nilai1=100,Nilai2=200, *PN1,*PN2,*PN3;
PN1 = &Nilai1;
PN2 = &Nilai2;
PN3 = PN1;
If(PN1<PN2) printf(“PN1 menunjuk ke memori lebih rendah dari PN2\n”);
If(PN1==PN2) printf(“PN1 menunjuk ke memori yg sama dengan PN2\n”);
If(PN1>PN2) printf(“PN1 menunjuk ke memori lebih rendah dari PN2\n”);
If(PN1<PN3) printf(“PN1 menunjuk ke memori lebih rendah dari PN3\n”);
If(PN1==PN3) printf(“PN1 menunjuk ke memori yg sama dengan PN3\n”);
If(PN1>PN3) printf(“PN1 menunjuk ke memori lebih rendah dari PN3\n”);
TERIMAKASIH