Anda di halaman 1dari 8

Deklarasi Pointer Variabel pointer dideklarasikan dengan nama variabelnya ditulis dengan diawali karakter asterisk.

Bentuk umum : Tipe-data *nama-variabel-pointer; Contoh : int *data; berarti data adalah sebuah pointer yang menunjuk ke jenis data integer. Inisialisasi Variabel Pointer Pemberian harga awal pada variable-variabel pointer dapat sekaligus dilakukan pada saat variable-variabel tersebut dideklarasikan. Harga awal yang diberikan adalah alamat lokasi memory. Contoh : int i,j; int *intptr = &i; atau bisa juga int i,j, *intptr ; intptr = &i ; intptr variable pointer ke jenis data integer dengan memberi harga awal berupa alamat variable i. Pointer dan Array Identifier suatu array equivalent dengan alamat dari elemen pertama, pointer equivalent dengan alamat elemen pertama yang ditunjuk. Perhatikan deklarasi berikut : int numbers [20]; int *p; Maka deklarasi di bawah ini juga benar : p = numbers; p dan numbers equivalent, dan memiliki sifat (properties) yang sama. Perbedaanya, user dapat menentukan nilai lain untuk pointer p. dimana numbers akan selalu menunjuk nilai yang sama seperti yang telah didefiniskan. P, merupakan variable pointer, numbers adalah constant pointer. Karena walaupun instruksi di atas benar, tetapi tidak untuk instruksi di bawah ini : numbers = p; Karena numbers adalah array (constant pointer), dan tidak ada nilai yang dapat diberikan untuk identifier constant (constant identifier). Operasi penambahan pointer merupakan suatu peningkatan nilai pointer yang menunjukkan lokasi nilai data berikutnya di memory. Misalkan variael pointer x menun jukkan alamat memori 1000, maka operasi penambahan x+1 menunjukkan alamat 1000+sizeof(x). Pointer dan String (pointer to string) Contoh hubungan pointer dan string ditunjukkan pada program berikut.

Contoh eksekusi : String yang ditunjuk oleh pkota = SIDOARJO Pada program di atas, char *pkota = SIDOARJO; akan menyebabkan kompiler mengalokasikan variabel pkota sebagai variabel pointer yang menunjuk ke obyek bertipe char dan menempatkan konstanta SIDOARJO dalam suatu memori kemudian pointer pkota akan menunjuk ke lokasi string SIDOARJO. Pernyataan di atas menyerupai pernyataan char kota[] = SIDOARJO; tetapi sebenarnya kedua pernyataan inisialisasi di depan tidaklah tepat sama. Sebab pkota adalah pointer (menyatakan alamat) yang dengan mudah dapat diatur agar menunjuk ke string lain (bukan string SIDOARJO), sedangkan kota adalah array (array menyatakan alamat yang konstan, tak dapat diubah). 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. Array pointer bisa diinisialisasi sewaktu pendeklarasian. Pointer menunjuk Pointer (Pointer to Pointer) Suatu pointer bisa saja menunjuk ke pointer lain. Gambar berikut memberikan contoh mengenai pointer menunjuk pointer. Namahari

Untuk membentuk rantai pointer seperti pada gambar di atas, pendeklarasian yang diperlukan berupa int var_x; int *ptr1; int **ptr2; Perhatikan pada deklarasi di depan: var_x adalah variabel bertipe int. ptr1 adalah variabel pointer yang menunjuk ke data bertipe int. ptr2 adalah variabel pointer yang menunjuk ke pointer int. (itulah sebabnya deklarasinya berupa int **ptr2; ) Agar ptr1 menunjuk ke variabel var_x, perintah yang diperlukan berupa ptr1 = &var_x; Sedangkan supaya ptr2 menunjuk ke ptr1, instruksi yang diperlukan adalah ptr2 = &ptr1; ARITMATIKA PADA POINTER DAN ARRAY

Dari gambar diatas dapat disimpulkan bahwa apabila P=A[0], maka P+1 = &A[1] , P+2 = &A[2], dan seterusnya. Dari gambaran diatas melakukan operasi aritmatika terhadap pointer P yang berhubungan dengan array A (dalam hal ini operasi penjumlahan), proses seperti ini dinamakan Aritmatika Pointer dan array . HUBUNGAN DENGAN OPERATOR ++ DAN - Masalah dengan operator + + dan -Hanya sebagai pengingat berikut dua pernyataan tidak melakukan referensi yang sama: * pc + + = getchar (); * + + pc = getchar ();

Pernyataan pertama memberikan karakter dikembalikan oleh getchar () ke sel current ditunjuk oleh pc dan kemudian pc bertahap. Increment. Pernyataan kedua alamat di pc pertama dan kemudian memberikan karakter dikembalikan oleh fungsi ke sel yang ditunjuk oleh alamat yang diperbarui. Kemudian dalam bab akan menggunakan dua jenis tugas pointer untuk referensi unsur argv (argument for vector) yaitu pointer ke string yang menyimpan parameter-parameter apa saja yang digunakan dalam eksekusi program . PENGGUNAAN KONSTANTA PADA POINTER Pointer dapat bersifat konstan artinya pointer tersebut hanya dapat menunjuk dari alamat tertentu saja . Kata kunci : const Kata kunci const dapat ditempatkan sebelum tipe data , sesudah maupun keduanya (sebelum dan sesudah tipe data) . Penempatan yang salah akan menyebabkan perbedaan arti. a) Kata kunci const sebelum tipe data Pointer akan menunjuk ke alamat yang ditempati sebuah nilai yang bersifat konstan .Artinya nilai tersebut tidak dapat dirubah . Bentuk umum : const tipe_data*nama_pointer Contoh :

Program diatas tampak statement const int *P yang meyatakan bahwa kita melakukan deklarasi konstanta terhadap nilai yang alamatnya akan ditunjuk oleh pointer P. Dengan demikian, apabila pointer P menunjuk ke alamat dari variable x, maka nilai dari variable x atau *P tidak

dapat dirubah . Sedangkan pointer P diatas tidak bersifat konstan maka dapat menunjuk ke alamat dari variable lain (dalam hal ini y) . b) Kata kunci const setelah tipe data Pointer yang hanya dapat menunjuk ke satu buah alamat tertentu saja. Berarti kita tidak dapat menunjuk ke alamat lainnya . Bentuk umum : Tipe_data * const nama_pointer Contoh :

Program diatas mendeklarasikan konstanta pointer, yaitu dengan nama P, dimana pointer tersebut tidak dapat menunjuk ke alamat dari variable lain (dalam hal ini y). Pointer P hanya menunjuk alamat dari variable x saja, namun dapat merubah nilai dari variable x atau *P. c) Kata kunci const sebelum dan sesudah tipe data (gabungan) Hal ini bahwa kita mendeklarasikan konstanta terhadap nilai dari variable dan juga nilai dari pointernya . Sehingga kita tidak dapat mengubah nilai dari variable maupun alamat yang telah ditunjuk oleh pointer . Bentuk umum : const tipe_data * const nama_pointer Contoh :

Pada program diatas pointer P hanya dapat menunjuk ke alamat dari variable x saja dan tidak dapat merubah nilai pada variable dari alamat yang ditunjuk oleh pointer P . POINTER PERBANDINGAN Pointer dapat dibandingkan dengan menggunakan operator hubungan, seperti !=, ==, <, dan >. Contohnya : POINTER PORTABILITY Contoh dalam bagian ini telah mewakili alamat sebagai bilangan bulat. Hal ini menunjukkan kepada Anda bahwa C / C + + pointer adalah tipe int. Ini bukan pointer memegang alamat dari jenis tertentu dari variabel, tetapi pointer itu sendiri bukanlah salah satu dari tipe data primitif int, mengambang dan sejenisnya. Sebuah khususnya C / C + + sistem memungkinkan pointer yang akan diatasi menjadi variabel int dan variabel int akan dikopi ke pointer, namun, C / C + + tidak menjamin bahwa pointer dapat disimpan dalam variabel int. Untuk menjamin portabilitas kode, praktek harus dihindari. Juga tidak semua operasi aritmatika pada pointer diperbolehkan. Sebagai contoh, adalah ilegal untuk menambahkan dua pointer, untuk memperbanyak dua pointer, atau untuk membagi satu pointer oleh orang lain. PENGGUNAAN SIZEOF DENGAN POINTER DOS DIBAWAH 16-BIT Sizeof adalah untuk mendapatkan ukuran dari tipe data tertentu pada saat kompilasi unary operator yang mengembalikan panjang, dalam satuan byte, dari variable atau disisipkan type specifier yang mendahului. Sebagai contoh,dengan asumsi bahwa bilangan bulat (integer) adalah 4 byte dan ganda (double) adalah 8 byte, double f;

printf("%d ", sizeof f); printf("%d", sizeof(int)); POINTER PADA FUNGSI Pointer dan kaitannya dengan fungsi yang akan dibahas berikut meliputi : 1. Pointer sebagai parameter fungsi Penerapan pointer sebagai parameter yaitu jika diinginkan agar nilai suatu variabel internal dapat diubah oleh fungsi yang dipanggil. Contoh : void rubah(int *x, int *y); main() { int a=3; int b=7; printf("Nilai semula : a= %d dan b= %d", a,b); rubah(&a, &b); printf("\nNilai akhir : a= %d dan b= %d", a,b); } void rubah(int *x, int *y) { *x = *y + 2; *y = *y + 2; } Hasil : Nilai semula : a= 3 dan b= 7 Nilai akhir : a= 9 dan b= 9 POINTER KELUARAN DARI FUNGSI Suatu fungsi dapat dibuat agar keluarannya berupa pointer. Misalnya suatu fungsi menghasilkan keluaran berupa pointer yang menunjuk ke string. Contoh : char *nama_bulan(int n); main() { int bl; char lagi; do { clrscr(); printf("Bulan (1..12) : "); scanf("%d", &bl); printf("%s\n", nama_bulan(bl)); printf("Input lagi [y/t] : "); lagi=getch(); }while (lagi == 'y' || lagi == 'Y'); } char *nama_bulan(int n) { static char *bulan[] = { "Kode bulan salah", "Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember" }; return ((n<1 || n>12) ? bulan[0] : bulan[n]);

Hasil : Bulan (1..12) : 4 Output : April Input lagi [y/t] : MEMORI DINAMIS

Alokasi memori secara dinamis membutuhkan pointer untuk mencatat alamat-alamat baru yang dipesan yakni dapat diubahubah alokasi tempatnnya pada memori data yang dimasukkan sebagai nilai pointer akan selalu tersimpan. Fungsi-fungsi yang digunakan untuk memesan memori yaitu fungsi malloc(), calloc(), dan realloc(). Fungsi malloc() : mengembalikan pointer ke sejumlah n byte ruang memori yang belum diinisialisasi jika tidak terpenuhi maka mengembalikan nilai NULL . Bentuk prototype : void *malloc (size_t n);

Tumpukan adalah daerah memori bebas (kadang-kadang disebut sebagai "toko bebas") yang dimanipulasi dengan menggunakan alokasi malloc fungsi dinamis () dan free (). Ketika malloc () dipanggil, ia mengalokasikan berdekatan penyimpanan untuk objek ditentukan dan kemudian mengembalikan pointer ke awal blok. Free function () mengembalikan memori yang sebelumnya dialokasikan ke tumpukan, memungkinkan bahwa sebagian dari memori yang akan dialokasikan kembali. Argumen dikirimkan ke malloc () merupakan integer yang mewakili jumlah byte penyimpanan yang dibutuhkan. Jika penyimpanan yang tersedia, malloc () akan mengembalikan void * .

Anda mungkin juga menyukai