Pointer pada dasarnya adalah sebuah variabel yang nilainya adalah alamat penyimpanan dari variabel lain. saat kita mendeklarasikan variabel ada 2 jenis nilai yang di hasilkan yaitu LValue dan RValue, apakah itu ?. coba perhatikan gambar ini.
- LValue adalah lokasi/address di memori tempat data disimpan
- RValue adalah nilai yang disimpan di lokasi memori. RValue tidak menempati memori, dia hanya bersifat sementara karena biasanya langsung digunakan dalam instruksi mesin saat kompilasi atau hanya disimpan di register.
Karena pointer adalah variabel yang RValue nya adalah LValue variabel lain, maka dia bisa dideklarasikan dan diakses, untuk bisa mendeklarasikan dan mengaksesnya, kita memerlukan operator, operator ini disebut pointer access operator.
Deklarasi pointer
berfungsi untuk mendeklarasikan pointer. Dengan menaruh simbol asterisk (*) sebelum nama variabel, kita sudah bisa mendeklarasikan pointer.
int *mypoin ;
Sekarang pointer sudah dibuat dengan nama mypoin, selanjutnya kita perlu mengisi nilai pointer dengan lokasi data variabel, caranya dengan menggunakan reference Operator.
Reference Operator (&)
berfungsi untuk memasukan data lokasi variabel kedalam pointer.
mypoin = &myvar;
Dengan mencantumkan simbol “&“ sebelum nama variabel, berarti nilai pointer mypoin sudah menunjuk pada data lokasi variabel myvar.
Dereference Operator (*)
Berfungsi untuk mendapatkan nilai yang disimpan pada lokasi memori yang ditunjuk oleh pointer
*mypoin = 5;
Dengan syntax ini, kita bisa merubah nilai variabel yang ditunjuk oleh pointer.
Contoh 1 Program Penerapan Pointer
void setup() {
Serial.begin (9600);
int myvar = 7; //blok program 1
int *mypoin ; //blok program 2
int hasil = 0; //blok program 3
mypoin = &myvar; //blok program 4
hasil = *mypoin; //blok program 5
Serial.print ("Nilai pointer mypoin = ");
Serial.println ((long)mypoin, DEC);
Serial.print ("Nilai variabel hasil = ");
Serial.println (hasil, DEC);
}
void loop() {
//nocode
}
- Blok Program 1 : mendeklarasikan variabel dengan nama Myvar, nilai yang disimpan adalah 7 dan menggunakan tipe data integer
- Blok Program 2 : mendeklarasikan pointer dengan nama Mypoin, dengan tipe data integer, deklarasi pointer ditandai dengan simbol asteriks sebelum nama variabel.
- Blok Program 3 : mendeklarasikan variabel bernama hasil, nilai yang disimpan adalah 0, dengan tipe data integer.
- Blok Program 4 : memasukan data lokasi variabel kedalam pointer Mypoin, sehingga RValue pointer Mypoin sama dengan LValue Myvar
- Blok Program 5 : mengambil nilai yang disimpan pada lokasi memori yang ditunjuk oleh pointer, dalam hal ini yang ditunjuk oleh pointer adalah variabel Myvar, sehingga nilai variabel hasil, sama dengan nilai yang disimpan pada variabel Myvar.
Pada serial monitor terlihat bahwa nilai dari pointer mypoin adalah 2298, nilai itu adalah LValue dari variabel myval. Sedangkan nilai variabel hasil sama dengan nilai variabel myvar, itu karena variabel hasil mengambil nilai dari variabel yang ditunjuk oleh pointer.
Contoh2 penerapan pada sketch (merubah nilai variabel yang ditunjuk pointer)
void setup() {
Serial.begin(9600);
int myvar = 7;
Serial.print("myvar LValue: ");
Serial.println((long) &myvar, DEC);
Serial.print("myvar RValue: ");
Serial.println(myvar, DEC);
Serial.println();
int *mypoin;
mypoin = &myvar;
Serial.print("mypoin LValue: ");
Serial.println((long) &mypoin, DEC);
Serial.print("mypoin RValue: ");
Serial.println((long) mypoin, DEC);
Serial.println();
*mypoin = 3; //merubah nilai variabel yang ditunjuk pointer
Serial.println("-----------------------");
Serial.println("Update *mypoin = 3");
Serial.println();
Serial.print("mypoin LValue: ");
Serial.println((long) &mypoin, DEC);
Serial.print("mypoin RValue: ");
Serial.println((long) mypoin, DEC);
Serial.println();
Serial.print("myvar LValue: ");
Serial.println((long) &myvar, DEC);
Serial.print("myvar RValue: ");
Serial.println(myvar, DEC);
Serial.println();
}
void loop() {
//nocode
}
Yang perlu diperhatikan hanya syntax ini saja
*mypoin = 3;
Sebelumnya, kita hanya mengambil nilai saja dari variabel yang ditunjuk oleh pointer, tapi sekarang kita memberikan nilai kepada variabel yang ditunjuk, itu sama saja dengan kita mengubah nilai variabel yang ditunjuk oleh pointer. Terlihat pada serial monitor, nilai variabel myvar yang tadinya 7 berubah menjadi 3.
Jadi, apa sebenarnya keunggulan dari pointer dibandingkan dengan mendeklarasikan variabel biasa ?, salah satu beberapa keuntungan menggunakan pointer adalah efisiensi penggunaan memori.
Saat kita menyalin nilai dari variabel satu ke variabel lain, nilai akan disalin secara penuh dan mengkonsumsi memori padahal nilai nya sama, ini mengakibatkan adanya duplikasi data. contoh
int a = 10;
int b = a; // Nilai 'a' disalin ke 'b', mengonsumsi memori tambahan & duplikasi data
Jika kita menggunakan pointer, tidak perlu menyalin datanya karena kita bisa mengaksesnya langsung melalui lokasi memorinya, tidak terjadi duplikasi data.
int a = 10;
int *p = &a; // Pointer 'p' hanya menyimpan alamat 'a', tanpa menyalin nilai
Refer friends, earn cash—sign up now! https://shorturl.fm/6cc5f
Turn your traffic into cash—join our affiliate program! https://shorturl.fm/Yzalm
https://shorturl.fm/goDYb
https://shorturl.fm/H1vbb
https://shorturl.fm/SaPpL
https://shorturl.fm/oCMrs
https://shorturl.fm/n4DtF
https://shorturl.fm/cwBgL
https://shorturl.fm/sHMRy
https://shorturl.fm/iTu0m
https://shorturl.fm/oE6OI
https://shorturl.fm/0gk1M
https://shorturl.fm/3xbUV
https://shorturl.fm/1v8J0
https://shorturl.fm/hAts9
https://shorturl.fm/l4JPW
https://shorturl.fm/SPpmi
https://shorturl.fm/ajaMW
https://shorturl.fm/IFaEg
https://shorturl.fm/sDd92
https://shorturl.fm/JVGpr
https://shorturl.fm/YzdeQ
https://shorturl.fm/MmC9X
https://shorturl.fm/qjBSU
https://shorturl.fm/RY3Ab
https://shorturl.fm/GzAgi
https://shorturl.fm/VfdYC
https://shorturl.fm/hhcTY
https://shorturl.fm/deNfJ
https://shorturl.fm/PiG0u
https://shorturl.fm/52Dtb
https://shorturl.fm/lx7gk
2thetw