Mengenal Pointer Pada Pemrograman Arduino

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
				
			

Satu pemikiran pada “Mengenal Pointer Pada Pemrograman Arduino”

Tinggalkan komentar