Apa itu Pointer?
Penjelasan Pointer C++ Arduino
Belajar Bahasa Pemrograman Untuk Arduino (Pointer) – Pada saat kita membuat program, umumnya kita akan mengsialisasi sebuah variabe dan sebuah variabel sering kita berikan nilai. Sebagai contoh:
int a = 10;
Ketika kita buat seperti itu, secara otomatis mikrokontroller akan menyimpan nilai “10” ke variabel “a”. Varibel “a”, sebenarnya adalah sebuah alamat memori untuk menampung nilai “10”. Memori untuk menampung data pada mikrokontroller dalam hal adalah SRAM.
Sebagai contoh bahwa variabel “a”, alamat dalam memorinya adalah 0x34ff49. Maka nilai “10” akan ditampung pada alamat memori 0x34ff49.
Nah, ketika kita ingin mengambil nilai dari variabel “a”, lalu nilai tersebut ingin kita masukkan ke variabel “b”, maka secara umum kita akan membuat:
int a = 10;
int b = 0;
void setup()
{
b = a;
Serial.begin(9600);
Serial.print("Nilai a adalah: ");
Serial.print(a);
Serial.print(" yang tersimpan pada alamat 0x");
Serial.println((int)&a);
Serial.print("Nilai b adalah: ");
Serial.print(b);
Serial.print(" yang tersimpan pada alamat 0x");
Serial.println((int) &b);
}
void loop()
{
}
Output:
Nilai a adalah: 10 yang tersimpan pada alamat 0x256
Nilai b adalah: 10 yang tersimpan pada alamat 0x344
Maka hasilnya adalah “Nilai a adalah 10 dan Nilai b adalah 10”. Hasilnya benar!
Tapi taukah anda bahwa, kita sudah menggunakan 2 alamat memori yang berbeda dimana kita menampung nilai yang sama?
Seperti contoh diatas, memori varibel a = 0x256 dan b = 0x344. Yang seperti itu dikatakan pemborosan memori, padahal kita hanya mengambil nilai yang sama.
Jika kita ingin mengambil nilai dari suatu variabel dengan tidak mengubah nilai variabel tersebut, maka kita gunakan POINTER.
Jadi pointer itu adalah sebuah metode yang mana kita bisa mengakses memori dari suatu variabel dan mengambil/mengubah nilai pada memori tersebut menggunakan variabel yang berbeda.
Operator Pointer C++
Ketika kita menggunakan pointer, kita harus menggunakan operator pointer. Operator dari Pointer itu ada 2, yaitu:
- & (dan) digunakan untuk membaca/mendapatkan alamat memori
- * (bintang) digunakan untuk menentukan variabel tertentu sebagai pointer dan digunakan juga untuk mengambil data(nilai) dari sebuah alamat memori
Pusing ya?
Mari kita lihat contohnya:
int a = 10;
int *b ;
void setup()
{
b = &a;
Serial.begin(9600);
Serial.print("Nilai a adalah: ");
Serial.print(a);
Serial.print(" yang tersimpan pada alamat 0x");
Serial.println((int)&a);
Serial.print("Nilai b adalah: ");
Serial.print(*b);
Serial.print(" yang tersimpan pada alamat 0x");
Serial.println((int)b);//Tidak lagi menggunakan operator &, karena kita membaca alamat pointer
}
void loop()
{
}
Output:
Nilai a adalah: 10 yang tersimpan pada alamat 0x256
Nilai b adalah: 10 yang tersimpan pada alamat 0x256
Kira-kira paham ya? Jadi kita menggunakan dua variabel dan hanya mengambil 1 alamat memori, biar hemat memori.
Kita udah tahu bahwa untuk mengambil data dari suatu alamat memori adalah menggunakan operator * (bintang).
Pada pemrograman tertentu kita akan menggunakan operator ** (bintang bintang), yang artinya “Pointer ke Pointer”. Prinsipnya sama seperti penjelasan sebelumnya.
Semoga bermanfaat.