POINTER




Pointer adalah sebuah variabel yang berisikan alamat memori (bukan nilai) atau dengan kata lain dapat dikatakan bahwa pointer adalah suatu variabel penunjuk ke alamat memori tertentu. Secara umum, pointer dapat digambarkan sebagai berikut.



 Ilustrasi Pointer

Dari gambar di atas, dapat kita lihat bahwa pointer P sedang menunjuk ke alamat ke-1, ini berarti bahwa nilai dari pointer P adalah alamat ke-1. Hal ini berbeda dengan variabel biasa yang hanya dapat menyimpan nilai dengan tipe data tertentu.

Keuntungan menggunakan pointer ini adalah kita dapat mengakses data dengan ukuran yang besar dengan waktu yang relative lebih cepat bila dibandingkan dengan variabel biasa ataupun variabel array. Selain itu, untuk menunjuk lokasi memori tertentu dapat dilakukan ketika program aplikasi sedang dijalankan sehingga ini menjadi lebih flrksibel.

1. DEKLARASI POINTER

A. Deklarasi Pointer Dengan Tipe
Adapun cara pendeklarasian pointer di dalam bahasa C adalah dengan menambahkan tanda asterik (*)di depan nama pointer yang akan dibuat. Berikut bentuk umumnya.

tipe_data *nama_pointer;

Contoh:

char *pointermu;
int *data_pointer = 0x90;

Pada deklarasi pointer pertama diatas, kita mendefinisikan sebuah pointer yang digunakan untuk menunjuk sebuah data di memori tetapi belum ditentukan alamat memori yang dimaksud sedangkan pada deklarasi kedua sudah ditentukan alamat memorinya yaitu 0x90.
Keluarga mikrokontroler AVR memiliki 3 kelompok memori yaitu memori program (flash memory), memori data (SRAM), dan memori EEPROM. Sehingga untuk mendeklarasikan sebuah pointer kita juga harus mendefinisikan alamat memori manakah yang kita tuju apakah memori program, memori data, atau memori EEPROM. Perbedaan cara deklarasi ketiga jenis memori tersebut adalah sebagai berikut.

char flash *pointer_di_flash;   // pointer di memori program
char eeprom *pointer_di_eeprom; // pointer di memori EEPORM
char *pointer_di_ram;           // pointer di memori SRAM

B. Deklarasi Pointer Tanpa Tipe
Sebelumnya kita telah mempelajari bahwa pointer yang dideklarasikan dengan tipe data tertentu (misalnya tipe int), hanya dapat menunjuk alamat yang berisi variabel dengan tipe data yang sesuai (dalam hal ini tipe int). Dengan kata lain pointer tersebut tidak dapat digunakan untuk menunjuk ke alamat yang berisi variabel dari tipe data lain seperti floatdoublechar, maupun lainnya.
Dalam bahasa C terdapat cara khusus untuk membuat pointer tersebut dapat menunjuk ke alamat – alamat yang berisi variabel dari tipe data apapun, yaitu dengan menggunakan kata kunci ‘void’ pada saat pendeklarasiannya. Maka dari itu, pointer seperti ini sering disebut dengan istilah pointer tanpa tipe (void pointer). Berikut ini bentuk umum untuk mendeklarasikan suatu pointer tanpa tipe.

void *nama_pointer;

Contoh:

void *t;
void *data = 0xFE;

2. POINTER DAN ARRAY
Dalam bahasa C pointer dan array saling berhubungan. Anggaplah kita memiliki array A yang terdiri dari 10 buah elemen yang bertipe int serta pointer p yang akan menunjuk ke tipe int. Sekarang apabila kita mengeset pointer tersebut untuk menunjuk ke elemen pertama array, maka kita dapat mengakses elemen–elemen dari array A tersebut dengan menggunakan pointer p.

Contoh:

#include<mega8535.h>

int main(void)
{
 int A[10] = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100};
 int j;
 int *p;

 for(j=0;j<10;j++)
   {
     p = &A[j];
     PORTA = p;
   }

 return 0;
} 


3. POINTER SEBAGAI PARAMETER FUNGSI
Terdapat dua cara untuk melewatkan parameter ke dalam suatu fungsi, yaitu dengan menggunakan pass by value(melewatkan berdasarkan nilai) dan pass by reference (melewatkan berdasarkan alamat). Alamat yang dimaksud di sini tidak lain adalah pointer.

Contoh:

#include<mega8535.h>
int hitung(int *x, int *y)
{
  *x = *y + 0x35;
}

int main(void)
{
 PORTD = hitung(&0x23,&0x10);
 return 0;
}

4. POINTER KONSTAN ( “CONST“)
Pointer dapat bersifat konstan, artinya pointer tersebut hanya dapat menunjuk dari alamat tertentu saja. Untuk melakukan hal ini kita harus menggunakan kata kunci const yang telah disediakan dalam bahasa C. Bentuk umum dari penempatan kata kunci const sebelum tipe data adalah sebagai berikut.

const tipe_data *nama_pointer;


Contoh:

#include<mega8535.h>

int main(void)
{
 const int *p;

 ……………………
 …………

 return 0;
}

5. MENUNJUK ALAMAT SEBUAH VARIABEL
Apabila kita telah membuat deklarasi pointer maka selanjutnya kita dapat menunjuk pada alamat memori tertentu tempat menyimpan sebuah variabel data seperti contoh berikut:

Contoh:

char data = 0x20;
char *alamat;
alamat = &data;


Keterangan program:

Baris pertama,
Mendeklarasikan sebuah variabel bernama ‘data’ dengan tipe ‘char’ (1-byte) dimana isi datanya yaitu 0x20 disimpan di alamat memori tertentu (sebagai contoh misalnya disimpan di alamat 0x90).

Baris kedua,
Mendeklarasikan sebuah pointer dengan nama ‘alamat’ yang digunakan untuk menunjuk alamat memori tertentu yang dalam hal ini belum ditentukan.

Baris ketiga,
Digunakan untuk menyatakan bahwa alamat memori yang digunakan untuk menyimpan variabel ‘data’ adalah pada pointer bernama ‘alamat’, sehingga sekarang pointer sudah menunjuk ke memori variabel ‘data’. Jadi pointer sekarang berisi 0x90 dan data yang ada di alamat memori 0x90 adalah 0x20.

 ---ooo00ooo---

Untuk menyimpan variabel pointer itu sendiri selain menggunakan memori SRAM seperti pada contoh diatas juga dapat menggunakan memori flash atau memori EEPROM. Jadi pointernya dapat disimpan di memori SRAM, memori flash, atau memori EEPROM dan data variabel yang ditunjuk juga dapat disimpan di memori SRAM, memori flash, atau memori EEPROM. Pointer yang disimpan dalam memori flash atau EEPROM dideklarasikan seperti contoh berikut:

1: char *flash pointermu1 = “simpan string di SRAM”;
2: flash char *flash pointermu2 = “simpan string di FLASH”;
3: eeprom char *flash pointermu3 = “simpan string di EEPROM”;
4: char *eeprom pointermu4 = “simpan string ini di SRAM”;
5: flash char *eeprom pointermu5 = “simpan string ini di FLASH”;
6: eeprom char *eeprom pintermu6 = “simpan string ini di EEPROM”;

Keterangan:

Baris 1:
Deklarasi pointer ‘pointermu1’ yang disimpan di memori flash dan variabel datanya berupa string “simpan string di SRAM” disimpan di SRAM.

Baris 2:
Deklarasi pointer ‘pointermu2’ yang disimpan di memori flash dan variabel datanya berupa string “simpan string di FLASH” disimpan di  FLASH.

Baris 3:
Deklarasi pointer ‘pointermu3’ yang disimpan di memori flash dan variabel datanya berupa string “simpan string di FLASH” disimpan di  EEPROM. 

Baris 4:
Deklarasi pointer ‘pointermu4’ yang disimpan di memori EEPROM dan variabel datanya berupa string “simpan string di FLASH” disimpan di  SRAM.

Baris 5:
Deklarasi pointer ‘pointermu5’ yang disimpan di memori EEPROM dan variabel datanya berupa string “simpan string di FLASH” disimpan di  FLASH.

Baris 6:
Deklarasi pointer ‘pointermu6’ yang disimpan di memori EEPROM dan variabel datanya berupa string “simpan string di FLASH” disimpan di  EEPROM. 





Share on Google Plus

About Robotics University

    Blogger Comment
    Facebook Comment

0 comments:

Post a Comment