Setiap
nama variabel yang deklarasi merupakan representasi dari sebuah alamat memori
yang menampung data. Misalkan terdapat sebuah variabel bertipe integer
dengan nama var_int, maka 4 byte memori akan dipesan untuk variabel tersebut.
Lokasi memori yang dipesan tersebut dikenal dengan nama var_int. Pada level
mesin, lokasi tersebut memiliki alamat memori.
Dalam
bahasa C, sebuah alamat memori dapat diakses dan dimanipulasi dengan
menggunakan pointer. Pointer adalah sebuah variabel yang digunakan untuk menyimpan
alamat memori variabel lain. Sebuah pointer dideklarasi dengan tipe data dan tanda ‘*’ (asterik) di depan nama variabel, seperti contoh di
bawah.
1
2
3
4
5
6
7
|
int *ptr_i; /* pointer dengan tipe
data integer */
float *ptr_f; /* pointer dengan
tipe data float */
double *ptr_d; /* pointer dengan
tipe data double */
char *ptr_c; /* pointer dengan
tipe data char */
|
Terdapat
dua operator yang digunakan dalam pointer, yaitu dereference operator (asterik
(‘*’)) dan reference operator (ampersand (‘&’)). Dereference operatordigunakan untuk
mendapatkan nilai dari
alamat memori yang ditunjuk oleh pointer. Sedangkan reference operator digunakan
untuk mendapatkan alamat memorisuatu
variabel.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
int i = 10;
/* mengambil alamat memori
variabel i dengan menggunakan
* reference operator dan
menyimpannya ke dalam pointer ptr_i
*/
int *ptr_i = &i;
/* mengambil nilai dari alamat
memori yang ditunjuk pointer ptr_i
* dengan menggunakan
dereference operator. Jika lupa meletakkan
* dereference operator di
depan nama variabel, maka yang akan
* tercetak adalah alamat
memori yang ditunjuk
*/
printf("%d\n", *ptr_i);
|
Tipe data variabel pointer harus sama dengan tipe
data variabel yang ditunjuk.
Cara Kerja
Pointer
Misalkan
terdapat sebuah variabel i dan sebuah pointer ptr_i, dengan ptr_i menunjuk ke
alamat i sebagai berikut.
1
2
3
|
int i = 10;
int *ptr_i = &i;
|
ASUMSIKAN
variabel i disimpan di dalam memori dengan alamat memori 22FF3C (dalam
hexadesimal) dan pointer disimpan di dalam memori dengan alamat memori 22FF38.
Maka yang tersimpan di dalam pointer ptr_i adalah 22FF3C. Dengan kata lain,
pointer ptr_i menunjuk ke alamat memori variabel i.
Perlu diingat, pointer hanya menujukkan ke sebuah
alamat memori BUKAN menyimpan nilai yang ada pada alamat memori tersebut. Jadi, jika nilai variabel i diubah, maka nilai yang
ditunjuk oleh pointer ptr_i juga akan berubah sesuai dengan nilai yang berubah.
Begitu juga jika nilai yang ditunjuk pointer ptr_i diubah seperti di bawah,
maka nilai pada variabel i juga akan berubah.
1
|
*ptr_i = 5
|
referensi :https://www.belajarcpp.com/tutorial/c/pointer-dasar/
0 Comments:
Posting Komentar