Pengertian Pointer
Pointer merupakan suatu variabel. Pointer wajib memiliki suatu alamat memori sehingga alamat suatu variabel dapat diketahui dengan mudah. Dalam pemrograman yang besar, penghematan memori sangat perlu dilakukan. Apabila menggunakan konsep copy-paste dalam programan, maka akan sangat memboroskan penggunaan memori. Dalam ponter, kita dapat menunjuk suatu memori, mengubah nilai dan menyalin nilai memori secara tidak langsung(perantara variabel pointer).
Adapun fungsi dari pointer sendiri yaitu:
1. Kegunaan utama adalah untuk meyimpan alamat memori dari sebuah variabel dan alamat.
2. Meningkatkan kinerja untuk operasi yang dilakukan secara berulang
2. Meningkatkan kinerja untuk operasi yang dilakukan secara berulang
Jadi, dalam mekanisme pointer, suatu vaiabel dalam suatu fungsi dapat diakses oleh fungsi yang lain.
Sebelum kita membahas bagaimana pendeklarasian dan pengaksesan pointer. Ada beberapa hal yang harus diketahui yaitu Addewss-of(&) dan Dereference operator(*).
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.
#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.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| #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; } |
Pendeklarasian Pointer
Bentuk penulisan pointer yaitu:
Contoh penulisan sebagai berikut:
Untuk mendeklarasikan sebuah variabel pointer, maka tambahkan dereference operator sebelum identitas. Pointer tidak hanya berlaku pada variabel, dapat juga digunakan pada function, objek dan lain-lain.
Operand sumber akan menghasilkan alamat memori dari myVar, dan hal itu merupakan nilai yang dibutuhkan oleh variabel pointer.
Contoh program:
Dari sintaks di atas, variabel pointer dengan nama pointer array sekarang menunjuk pada alamat memori elemen pertama array dengan nama nilai array.
Nah secara tidak langsung kita dapat mengakses nilai elemen array
dengan menggunakan variabel pointer. Berikut contoh 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.
tipeData *identitas;
//atau
tipeData *identitas = &var;
Contoh penulisan sebagai berikut:
int *pInt;
double *pDouble = &myVar;
Untuk mendeklarasikan sebuah variabel pointer, maka tambahkan dereference operator sebelum identitas. Pointer tidak hanya berlaku pada variabel, dapat juga digunakan pada function, objek dan lain-lain.
Mengakses Pointer
Dalam pengaksesan pointer, kita dapat mengakses nilai dari pointer dan mengakses nilai dari alamat memori yang dimiliki oleh pointer. Untuk pengksesan pointer tidak jauh berbeda dengan cara mengakses variabel. Pengaksesan pointer yaitu dengan cara seperti dibawah ini.pInt
Karena pointer memiliki nilai berupa alamat memori, untuk mengubah nilai dari pointer atau mengubah tujuan dari pointer membutuhkan opertor addres-of(&) pada operand sumber.pInt = &myVar
Operand sumber akan menghasilkan alamat memori dari myVar, dan hal itu merupakan nilai yang dibutuhkan oleh variabel pointer.
Contoh program:
#include <iostream>
using namespace std;
int main()
{
int var1 = 2, var2 = 5;
int *pVar = &var1;
cout<<"var1 = "<<&var1<<endl;
cout<<"pVar = "<<pVar<<endl;
cout<<"====="<<endl<<endl;
pVar=&var2;
cout<<"var2 = "<<&var2<<endl;
cout<<"pVar = "<<pVar<<endl;
return 0;
}
Ukuran Pointer
Besar memori dari pointer tergantung pada mesin kompiler. jika kompiler merupakan 32bit maka pointer akan memakan memori sebanyak 4 bytes, Jika menggunakan 64bit maka pointer memakan memori sebanyak 8 bytes.#include <iostream>
using namespace std;
int main()
{
int var = 2;
int *pVar = &var;
cout<<sizeof(pVar)<<endl;
return 0;
}
Pointer dan Array
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:
1
2
3
| int *pointerArray; int nilaiArray[5]; pointerArray = nilaiArray; //memberikan alamat elemen pertama array pada variabel pointer |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| #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; } |
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.
Pointer sebagai Parameter suatu 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 contoh program sederhananya:
Berikut adalah output programnya:
Pada program diatas, adalah membuat fungsi tambah, dimana ketika alamat 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.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| #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, adalah membuat fungsi tambah, dimana ketika alamat 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.
Referensi:
http://laraswahyu.blogspot.com/2017/05/pointer-dalam-bahasa-c-pengertian.html
https://www.sinauarduino.com/artikel/pointer-pada-pemrograman-cpp/
https://www.belajarcpp.com/tutorial/cpp/pointer/