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 float, double, char,
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.
0 comments:
Post a Comment