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:
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();
}
#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( );
}
#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( );
}
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