pointer
pengertian pointer
Pointer adalah penunjuk suatu variabel. Karena menunjuk suatu
variabel, maka pointer wajib memiliki alamat dari variabel yang
ditunjuknya. Kadangkala dalam program yang besar, penghematan memori
wajib untuk dilakukan. Dengan mekanisme copy dan paste
nilai variabel satu kedalam variabel lain, akan sangat memboroskan
memori. Dengan mekanisme pointer, suatu variabel dalam suatu fungsi
dapat diakses oleh fungsi yang lain.
Cara membuat pointer
Salah satu penggunaan pointer adalah untuk membuat suatu array yang dinamis (banyaknya data yang bisa ditampung sesuai keperluan). Sebagaimana kita ketahui jika kita membuat suatu program yang dapat menampung data nilai sebanyak 5 buah maka kita akan membuat suatu variabel array yang bertipe int dengan perintah int data[5]. Dengan cara begitu maka program hanya akan berjalan dengan baik jika data yang diinputkan banyaknya di kurang atau sama dengan 5 buah. Apa yang terjadi ketika data yang akan diinputkan ternyata 10 buah, maka langkah yang dilakukan adalah harus mengubah programnya dan mengganti int data[5] menjadi int data[10].
Cara lain untuk membuat program tersebut adalah dengan menggunakan suatu
variabel array yang dinamis dimana pemesanan tempat yang diperlukan untuk
menyimpan data tidak dideklarasikan dalam program tapi dilakukan secara runtime
(ketika program berjalan).
01:
#include 'stdio.h'
02:
#include 'conio.h'
03:
#include 'stdlib.h'
04:
main()
05:
{
06:
int *data;
07:
int i,banyakdata;
08:
printf("Banyak data yang akan diinputkan :
");scanf("%i",&banyakdata);
09:
data=(int *)malloc(sizeof(int)*banyakdata);
10:
for(i=0;i 11: {
12:
printf("Pemasukan data ke-%i :",i+1);scanf("%i",(data+i));
13:
}
14:
printf("Data yang telah diinputkan adalah : \n");
15:
for(i=0;i 16: printf("Data ke-%i : %i\n",i+1,*(data+i));
17:
getch();
18:
return 0;
19:
}
Maka hasil outputnya
adalah sebagai berikut:
Banyak data yang akan diinputkan : 5
Pemasukan data ke-1 :12
Pemasukan data ke-2 :3
Pemasukan data ke-3 :4
Pemasukan data ke-4 :5
Pemasukan data ke-5 :67
Data yang telah diinputkan adalah :
Data ke-1 : 12
Data ke-2 : 3
Data ke-3 : 4
Data ke-4 : 5
Data ke-5 : 67
Operator pointer
1.
Address-of Operator(&) adalah operator yang digunakan untuk
mendapatkan atau melihat alamat memori yang dimiliki oleh variabel
tersebut. Cara menggunakannya adalah dengan meletakkan tanda '&'
pada depan identitas saat pemanggilan variabel. Lokasi variabel akan
ditentukan otomatis oleh kompiler dan operating system pada saat
run-time.
Hasil output programnya adalah:
#include <iostream>
using
namespace
std;
int
main(){
int
a = 5;
cout<<
"Alamat Variabel a adalah :"
<<&a<<endl;
cout<<
"Nilai Variabel a adalah :"
<<a<<endl;
return
0;
}
Hasil output programnya adalah:
2. Dereference Operator(*)
adalah operator yang digunakan untuk mengakses nilai yang tersimpan
secara langsung dengan memberikan awalan arterisk '*' pada identifier
pointer. Sama dengan simbol Address-of Operator, peletakkan simbolnya diletakkan diawal variabel.
#include <iostream> using namespace std; int main(){ int a=5; //Memberikan nilai 5 pada variabel a int *b; //Mendeklarasikan variabel b sebagai pointer b = &a; //Mengkopikan alamat variabel a kedalam variabel pointer b cout<< "Nilai variabel a adalah " <<a<<endl; cout<< "Alamat variabel a adalah " <<&a<<endl; cout<< "Isi dari variabel b adalah " <<b<<endl; cout<< "Nilai yang tertampung dalam variabel b adalah " <<*b<<endl; return 0; } |
Pointer dan array
Tahukah kamu bahwa jika kamu menuliskan sebuah array tanpa tanda
kurung kotak ([]) maupun indeksnya, maka array tersebut menunjuk atau
bersi alamat elem pertama dari array tersebut. Misalkan kamu membuat
sebuah pointer bertipe int dengan nama pointerArray dan sebuah array dengan tipe yang sama yaitu int dengan nama nilaiArray, maka pemberian nilai berikut sah dan dapat dilakukan:
Dari sintaks di atas, variabel pointer dengan nama pointrArray sekarang menunjuk pada alamat memori elemen pertama array dengan nama nilaiArray.
Nah secara tidak langsung kita dapat mengakses nilai elemen array
dengan menggunakan variabel pointer. Berikut Mimin contohkan sintaks
pemrogramannya:
Hasil output programnya adalah sebagai berikut:
Dari hasil di atas, dapat kamu lihat bagaimana cara mengakses nilai array dengan menggunakan pointer.
Suatu pointer bertipe int hanya dapat digunakan untuk menunjuk pada variabel int. Sebab, tipe data tersebut akan menentukan sifat pointer ketika alamat pointer tersebut dilakukan increment. Begitu juga untuk tipe data yang lain.
int *pointerArray; int nilaiArray[5]; pointerArray = nilaiArray; //memberikan
alamat elemen pertama array pada variabel pointer |
#include <iostream>
using
namespace
std;
int
main(){
int
nilaiArray[5] = {2,5,4,6,7};
int
*pointerArray;
pointerArray =
nilaiArray;
cout<<"Nilai
pada elemen 0 nilaiArray adalah = "<<nilaiArray[0]<<endl;
cout<<"Nilai
pada elemen 0 nilaiArray (Pointer) adalah = "<<*pointerArray<<endl;
pointerArray++; //
naikan alamat yang ditunjuk pointer sejauh 1 integer
*pointerArray =
10; //Ubah nilai elemen 1 array (nilaiArray) menjadi 10
cout<<"Nilai
pada elemen 1 nilaiArray adalah = "<<nilaiArray[1]<<endl;
cout<<"Nilai
pada elemen 1 nilaiArray (Pointer) adalah =
"<<*pointerArray<<endl;
pointerArray =
nilaiArray; //kembalikan pointer pada elemen pertama
cout<<endl;
cout<<"Akses
nilai semua array dengan pointer dan looping for"<<endl;
for
(int
i=0; i<5; i++){
cout<<"Nilai
indeks ["<<i<<"] adalah =
"<<*(pointerArray+i)<<endl;
}
return
0;
}
Dari hasil di atas, dapat kamu lihat bagaimana cara mengakses nilai array dengan menggunakan pointer.
Suatu pointer bertipe int hanya dapat digunakan untuk menunjuk pada variabel int. Sebab, tipe data tersebut akan menentukan sifat pointer ketika alamat pointer tersebut dilakukan increment. Begitu juga untuk tipe data yang lain.
Pointer sebagai parameter fungsi
Seperti halnya dengan array, pointer dapat digunakan sebagai
parameter suatu fungsi. Karena sifat pointer yang hanya sebagai
penunjuk, maka setiap perubahan yang terjadi pada parameter, sebenarnya
terjadi pada variabel yang ditunjuk bukan pada variabel pointer. Berikut
Mimin contohkan program sederhananya:
Berikut adalah output programnya:
Pada program diatas, Mimin membuat fungsi tambah, dimana ketika alama suatu variabel diberikan sebagai parameter fungsi, nilai 20 akan ditambahkan pada alamat tersebut. Perbedaan parameter berupa pointer dan non-pointer adalah, pada variabel non-pointer, ketika kamu ingin memasukkan nilai pada sebuah variabel kedalam parameter, kamu harus memasukkan nilai dari variabel tersebut. Untuk parameter berupa pointer, kamu cukup memasukkan alamat variabel yang menampung nilai dengan operator (&) kedalam parameter fungsi
Yang menarik adalah pada fungsi tambah di atas, walaupun fungsi tersebut merupakan fungsi void tanpa nilai kembalian alias return, namun nilai variabel parameter berubah.
#include <iostream>
using
namespace
std;
void
tambah(int
*angka){
*angka +=20;
}
int
main(){
int
nilai = 10;
cout<<"Nilai variabel nilai
adalah = "<<nilai<<endl;
tambah(&nilai); //Memasukkan alamat
variabel nilai pada fungsi tambah
cout<<"Nilai variabel nilai
adalah = "<<nilai<<endl;
return
0;
}
Pada program diatas, Mimin membuat fungsi tambah, dimana ketika alama suatu variabel diberikan sebagai parameter fungsi, nilai 20 akan ditambahkan pada alamat tersebut. Perbedaan parameter berupa pointer dan non-pointer adalah, pada variabel non-pointer, ketika kamu ingin memasukkan nilai pada sebuah variabel kedalam parameter, kamu harus memasukkan nilai dari variabel tersebut. Untuk parameter berupa pointer, kamu cukup memasukkan alamat variabel yang menampung nilai dengan operator (&) kedalam parameter fungsi
Yang menarik adalah pada fungsi tambah di atas, walaupun fungsi tersebut merupakan fungsi void tanpa nilai kembalian alias return, namun nilai variabel parameter berubah.
DAFTAR PUSAKA
Yuliana. Praktikum
1 Array, Pointer dan Struktur.
Diakses pada tanggal 16 Februari 2019 pukul 20:29 WITA dari http://yuliana.lecturer.pens.ac.id/Struktur%20Data%20C/Prak%20SD%20-%20pdf/Praktikum%201.pdf
Komentar
Posting Komentar