POINTER
Tim Alpro Teknik Informatika
Pointer • Pointer merupakan salah satu keunggulan dari bahasa C. • Komputer mengalokasikan sebuah area pada memori ketika sebuah variabel dideklarasikan. • Area tersebut diacu dengan menggunakan sebuah variabel dalam program, namun ketika program di-compile dan berjalan, komputer mengacu area tersebut dengan menggunakan alamat atau lokasi dari memori.
Contoh Variabel • Perhatikan contoh berikut: int angka = 3; • Dalam hal ini, area pada memori dialokasikan untuk menyimpan nilai integer. Memori tersebut dapat diakses dengan menggunakan nama angka.
Alamat • Komputer mengacu kepada area memori dengan menggunakan sebuah alamat. • Alamat rinci dari data yang disimpan bergantung kepada jenis komputer, sistem operasi, dan compiler yang digunakan. • Jadi, meskipun nama variabel yang digunakan adalah tetap (fixed), alamat dari variabel yang digunakan akan berbeda pada sistem yang berbeda.
Pointer & Alamat • Variabel yang dapat menyimpan alamat disebut dengan ‘pointer’, dan alamat yang disimpan dalam pointer biasanya adalah variabel lain
Karakteristik Pointer • Hal penting yang harus diketahui adalah, compiler harus tahu jenis dari data yang disimpan dalam variabel yang diacu oleh pointer. • Sehingga dapat diketahui jumlah memori yang akan dialokasikan atau bagaimana cara untuk menangani isi dari memori yang diacu oleh pointer. • Sebuah pointer pada sebuah variabel char mengacu pada nilai dengan alokasi sebesar 1Byte, sedangkan sebuah pointer pada variabel int biasanya mengalokasikan 4Byte.
Karakteristik Pointer • Setiap pointer akan dihubungkan dengan jenis variabel tertentu, dan hanya bisa digunakan untuk mengacu jenis variabel tersebut. • Sehingga pointer berjenis ‘pointer to int’ hanya dapat mengacu pada variabel berjenis int, dsb. Secara umum sebuah pointer dari type tertentu ditulis dengan type* untuk setiap nama type
Deklarasi Pointer • Bentuk umum deklarasi pointer: Tipe *Nama-variabel-pointer; • Contoh pointer sebuah variabel berjenis int : int *almt; • Jenis dari variabel bernama almt adalah int*. Variabel tersebut dapat menyimpan alamat dari variabel apapun yang berjenis int.
Inisialisasi Pointer • Pointer yang tidak diinisialisasi sangatlah berbahaya, lebih berbahaya dari variabel biasa yang tidak diinisialisasi. Jadi, sebaiknya selalu lakukan inisialisasi pointer ketika dideklarasikan. Kita dapat menginisialisasi pointer almt sehingga tidak mengacu kemanapun: int *almt = NULL;
Null Pointer • NULL adalah sebuah konstanta dalam standard library dan setara dengan nilai 0 untuk sebuah pointer. • NULL memastikan sebuah pointer tidak mengacu ke lokasi manapun dalam memori. • Hal tersebut dimaksudkan untuk menghindari penimpaan (overwriting) memori.
Operator • Bahasa C menyediakan dua buah operator untuk operasi pointer yaitu operator ‘*’ dan operator ‘&’. • Operator alamat ‘&’ digunakan untuk mendapatkan alamat memori dari operandnya. &almt -> address
• Operator ‘*’ digunakan untuk mendapatkan nilai dari operandnya *almt -> value
Penggunaan Operator • Jika ingin menginisialisasi variabel almt dengan alamat dari variabel yang telah dideklarasikan, kita dapat menggunakan operator address of ‘&’: int angka = 50; int *almt = &angka; • Nilai awal dari almt adalah alamat dari variabel angka. • Perlu diingat bahwa deklarasi dari angka harus dilakukan terlebih dahulu sebelum deklarasi dari pointer yang akan digunakan untuk menyimpan alamat tersebut. int var = *almt; • Nilai var adalah 50.
Deklarasi Pointer dan Variabel • Tidak ada pendeklarasian khusus dari pointer. Kita dapat mendeklarasikan variabel biasa dan pointer dalam satu pernyataan: double nilai, *lokasi, abc; • Pernyataan tersebut mendeklarasikan dua variabel jenis 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 p berjenis int*, dan sebuah variabel q yang berjenis int. • Kesalahan umum yang sering terjadi adalah dengan menganggap variabel p dan q adalah pointer
Latihan • • • • •
Deklarasi var Y, Z, pointer X. Tipe char Nilai var X adalah J Isi nilai var X ke var Y Tampilkan alamat X Mengisi nilai dalam alamat X ke var Z
char *Alamat_X,X,Y,Z; X=’J’; Alamat_X = &X; Y = 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 telah dialokasikan oleh array tersebut. • Definisi pointer: int *P;
• kemudian kita tunjuk ke alamat Array A P = &A[0];
• P akan menunjuk alamat pertama Array
Array • Deklarasi array int A[10];
• Kita memerintahkan compiler untuk menyediakan alamat memori sebesar 10 * sizeof(int).
• Bila ukuran int adalah 4 byte, maka compiler 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 ke sejumlah n byte ruang memory yang belum diinisialisasi. Apabila tidak terpenuhi, maka fungsi ini akan mengembalikan nilai NULL. • Deklarasi int array[10]; int *p; p = (int *) malloc(10 * sizeof(int)); // p = (int*) malloc(40)
Ada Pertanyaan?