PEMROGRAMAN DASAR
BY : Ahmad Nur Fauzi
SMK ISLAM 1 KOTA BLITAR



Bab IV. Pointer
 KB 1. Pointer ke Variabel
Apa itu Variabel ?
Variabel Adalah suatu tempat menampung data atau konstanta dimemori yang mempunyai nilai atau data yang dapat berubah-ubah selama proses program. Dalam pemberian nama variabel.

Apa itu Pointer ?
Merupakan sebuah variabel yang berisi alamat dari variabel lain. Suatu pointer dimaksudkan untuk menunjukan ke suatu alamat memori sehingga alamat dari suatu variabel dapat diketahui dengan mudah. Terdapat dua macam operator pointer yang disediakan oleh Borland C++ yaitu Operator dereference ( & ) dan Operator reference ( * ).

Cara Deklarasi Pointer Pada Variabel ?
Karena keakhlian dari pointer untuk menunjuk secara langsung kesuatu nilai, memeriksa satu persatu data yang memiliki pointer pada saat variabel tersebut pertama kali dideklarasikan.
Bentuk penulisan:

tipe_data *nama_variabel;

Contoh Penggunaan Pointer Dereference

#include<stdio.h>
#include<conio.h>
#include<iostream.h>
main( )
{
   int aziz, amir, *sono;
   clrscr( );
   aziz = 75;
   amir = aziz;
   sono= &aziz;
   cout<<"Nilai Aziz = "<<aziz<<endl;
   cout<<"Nilai Amir = "<<amir<<endl;
   cout<<"Nilai Sono = "<<sono<<endl;
   getch();
}

Contoh Penggunaan Pointer Reference

#include<stdio.h>
#include<conio.h>
#include<iostream.h>
main( )
{
   int aziz, *sono, rafli;
   clrscr( );
   aziz = 75;
   sono = &aziz;
   rafli = *sono;
   cout<<"Nilai Aziz = "<<aziz<<endl;
   cout<<"Nilai Sono = "<<sono<<endl;
   cout<<"Nilai Rafli = "<<rafli<<endl;
   getch( );
}  
(CPP, 2016)

 KB 2. Pointer ke Array
Dalam pemrograman C, definisi array dituliskan: 
type_name array_name[number_of_array]
misal array A bertipe integer dengan 10 anggota didefinisikan dengan:
int A[10];
Apa maksudnya?
Dengan penulisan diatas, maka kita memrintahkan kompiler 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.
Bagaimana penggambaran di memori:
misalnya alamat awal Array A (A[0]) adalah 0xFFFF0000, maka dapat digambarkan:
A[0]
0xFFFF0000
A[1]
0xFFFF0004
A[2]
0xFFFF0008
…..
…......................
A[7]
0xFFFF001C
A[8]
0xFFFF0020
A[9]
0xFFFF0024
Lalu apa hubungannya dengan pointer?
Seperti pada pembahasan pointer dengan variabel, pointer pada array sesungguhnya kita juga memerintahkan pointer agar menunjuk ke alamat yang telah dialokasikan oleh array tersebut. Pada contoh diatas, bila kita mendefinisikan suatu pointer
int *P:
kemudian kita tunjuk ke alamat Array A
P = &A[0];
maka alamat P akan menunjuk ke alamat 0xFFFF0000
Untuk lebih jelasnya coba program berikut ini:
int main()
{
int *pointer, Array[10];
int i;
for(i=0;i<10;i++)>
Array[i] = i; //pengisian array
for(i=0;i<10;i++)
printf(“Array = %d\n”,Array[i]); //cetak Array
pointer = &Array[0]; // tunjuk pointer ke alamat awal array
// bisa dituliskan pointer=Array
for(i=0;i<10;i++)
printf(“pointer = %d\n”,*pointer++); //cetak pointer
}
Bagaimana hasil program diatas? 
Hasil dari:
for(i=0;i<10;i++)
printf(“Array = %d\n”,Array[i]); //cetak Array
dengan:
for(i=0;i<10;i++)
printf(“pointer = %d\n”,*pointer++); //cetak pointer
adalah sama.
Hal ini berarti dapat kita simpulkan bahwa:
1. Kita dapat membaca isi dari suatu array melalui suatu pointer, asalkan pointer tersebut menunjuk ke alamat dari array yang ingin kita baca. 
2 Increment dari pointer yang menunjuk ke array adalah sam dengan increment index (posisi) dari array yang ditunjuk.
Bagaimana dengan mengisikan data ke array dengan pointer?
Sama halnya dengan contoh diatas. Lihat contoh berikut ini;
int main()
{
int *pointer, Array[10];
int i;
pointer = &Array[0]; // tunjuk pointer ke alamat awal array
// bisa dituliskan pointer=Array
for(i=0;i<10;i++)
printf(“pointer = %d\n”,*pointer++); //cetak pointer
for(i=0;i<10;i++)
printf(“Array = %d\n”,Array[i]); //cetak Array
}
Hasilnya sama bukan?
Namun hati-hati ada kalanya kita tanpa sadar mebuat bug yang menyebabkan segmentation fault, contohnya:
int main()
{
int *pointer, Array[10];
int i;
for(i=0;i<10;i++)
Array[i] = i; //pengisian array
pointer = &Array[0]; // tunjuk pointer ke alamat awal array
// bisa dituliskan pointer=Array
for(i=0;i<10;i++)
printf(“pointer = %d\n”,*pointer++); //cetak pointer
for(i=0;i<10;i++)>
*pointer++ = i+10; //pengisian array melalui pointer
for(i=0;i<10;i++)
printf(“Array = %d\n”,Array[i]); //cetak Array
}
Bila kita lihat sekilas, tidak ada kesalahan dalam program diatas, namun saat kita eksekusi akan timbul segmentation fault. Penyebabnya adalah:
for(i=0;i<10;i++)>
*pointer++ = i+10; //pengisian array melalui pointer
Pada instruksi diatas posisi *pointer sudah tidak lagi menunjuk ke Array[0], namun sudah menunjuk ke Array[9 + 1], karena proses increment alamat pointer pada instruksi sebelumnya:
for(i=0;i<10;i++)
printf(“pointer = %d\n”,*pointer++); //cetak pointer
Dan kita telah memesan alamat memori sebesar 10 block (40 byte), sedangkan *pointer menunjuk ke block ke 11 (Array[9+1]). Jadi block ke 11 (Array[9+1]) belum dialokasikan, akibatnya muncul segmentation fault.
Bagaimana mengatasinya?
Menambah index Array? Solusi ini mungkin bisa berjalan namun tidak efisien. Solusi yang baik adalah dengan mengarahkan kembali penunjukan pointer ke alamat awal Array:
pointer = &Array[0]; // Tunjuk pointer ke alamat awal array
// bisa dituliskan pointer=Array
for(i=0;i<10;i++)>
*pointer++ = i+10; //pengisian array melalui pointer
pointer = &Array[0]; // tunjuk pointer ke alamat awal array
// bisa dituliskan pointer=Array
Coba ubah program diatas! Jalankan! Masih terjadi segmentation fault?
Maka yang perlu diingat adalah jangan lupa untuk mengembalikan pointer keposisi awal (posisi yang teralokasikan) sebelum kita menggunakan lagi.
Lalu apa perbedaan Array dan Pointer?
Array telah teralokasikan alamatnya pada memori pada tiap-tiap indexnya, sedangkan pointer hanyalah suatu penunjuk ke alamat memori (context Array).
Bisakah pointer menggantikan Array tanpa ada Array?
Bisa, asalkan pointer kita tunjuk ke alamat yang sudah teralokasikan oleh compiler. Caranya? Lihat pada bagian “POINTER dan ALOKASI MEMORI DINAMIS”. (Budiono, 2014)

 KB 3. Pemanfaatan Pointer
Pointer dapat menyelesaikan dengan baik permasalahan mengenai polindrom, baik menggunakan pointer ke string ataupun pointer ke array.  Pointer dapat menyelesaikan dengan baik masalah terkait laba dan rugi suatu perusahan. Pointer juga dapat menyelesaikan masalah dengan baik mengenai jarak antara dua titik. (Dhidhi Pambudi, 2014)



DAFTAR PUSTAKA


Budiono, A. (2014, Juni 05). NGELMU. Retrieved from POINTER dan ARRAY: http://ayo-ngelmu.blogspot.co.id/2009/02/pointer-dan-array.html
CPP, B. (2016, Februari 04). Belajar C++. Retrieved from Cara Deklarasi Pointer Pada Variabel C++: http://www.belajarcpp.com/2016/01/cara-deklarasi-pointer-pada-variabel-cplusplus.html
Dhidhi Pambudi, D. M. (2014). Pemrograman Dasar. Jakarta: Kementrian Pendidikan dan Kebudayaan.



Nama : Ahmad Nur Fauzi
Kelas : XI K 1
No : 05
Motto : Jangan Pernah Menyerah

Kalau Mau Download Disini

0 Responses so far.

Posting Komentar