Mengenai Saya
Pengertian Pointer
Pengertian Pointer
Pointer (variabel penunjuk) adalah suatu variabel yang berisi alamat memori dari suatu variabel lain. Alamat ini merupakan lokasi dari obyek lain (biasanya variabel lain) di dalam memori. Contoh, jika sebuah variabel berisi alamat dari variabel lain, variabel pertama dikatakan menunjuk ke variabel kedua.
Operator Pointer
Operator Pointer
Ada 2 operator pointer yang dikenal secara luas, yaitu operator & dan operator *.
Operator &
- Operator & bersifat Unary (hanya memerlukan satu operand saja)
- Operator & menghasilkan alamat dari operandnya
Operator & merupakan operator alamat. Pada saat pendeklarasian variable, user tidak diharuskan menentukan lokasi sesungguhnya pada memory, hal ini akan dilakukan secara otomatis oleh kompiler dan operating sysem pada saat run-time. Jika ingin mengetahui dimana suatu variable akan disimpan, dapat dilakukan dengan memberikan tanda ampersand (&) didepan variable , yang berarti "address of". Contoh :
ted = &andy;
Penulisan tersebut berarti akan memberikan variable ted alamat dari variable andy. Karena variabel andy diberi awalan karakter ampersand (&), maka yang menjadi pokok disini adalah alamat dalam memory, bukan isi variable. Misalkan andy diletakkan pada alamat 1776 kemudian dituliskan instruksi sbb :
andy = 25;
fred = andy;
ted = &andy;
Maka hasilnya :
hasil
- Operator * bersifat Unary (hanya memerlukan satu operand saja)
- Operator * menghasilkan nilai yang berbeda pada sebuah alamat
Operator * merupakan operator reference. Dengan menggunakan pointer, kita dapat mengakses nilai yang tersimpan secara langsung dengan memberikan awalan operator asterisk (*) pada identifier pointer, yang berarti "value pointed by". Contoh :
beth = *ted;
(dapat dikatakan:"beth sama dengan nilai yang ditunjuk oleh ted") beth = 25, karena ted dialamat 1776, dan nilai yang berada pada alamat 1776 adalah 25.
Deklarasi Pointer
Deklarasi Pointer
Seperti halnya variabel lain, variabel pointer juga harus dideklarasikan terlebih dahulu sebelum digunakan. Bentuk umum deklarasi pointer adalah :
Tipe_data*nama_pointer
Dimana Tipe_data merupakan tipe dari data yang ditunjuk, bukan tipe dari pointer-nya. Contoh :
1. Mensubstitusikan address sebuah variabel ke pointer dengan memakai address operator &
int x;
int *ptr;
ptr = &x;
2. Mensubstitusikan address awal sebuah array ke pointer
char t[5];
char *ptr;
ptr = t;
3. Mensubstitusikan address salah satu elemen array dengan address operator
char t[5] ;
char *ptr;
ptr = &t[3];
4. Mensubstitusikan address awal character string ke pointer char
char *ptr;
ptr = ”jakarta”
5. Mensubstitusikan NULL pada pointer. NULL ada pointer kosong, menunjukkan suatu status dimana pointer itu belum diinisialisasikan dengan sebuah address tertentu.
6. Memakai fungsi MALLOC.
Macam-Macam Pointer
Macam – macam Pointer
Pointer Bertipe Void
Pada C++ terdapat pointer yang dapat menunjuk ke tipe data apapun, pointer semacam ini dideklarasikan dengan tipe void sehingga sering dikenal dengan istilah Void Pointer. Berikut ini contoh listing program yang menggunakan void pointer.
#include "conio.h"
#include "iostream.h"
int main()
{
void *p;
int a = 10;
double b = 2.34;
char c = 'S';
p = &a; //P akan menunjuk ke tipe data int
cout<<"Alamat (a=10) yang ditunjuk p : " <<>
p = &b; //P akan menunjuk ke tipe data double
cout<<"Alamat (b=2.34) yang ditunjuk p : " <<>
p = &c; //P akan menunjuk ke tipe data char
cout<<"Alamat (c='S') yang ditunjuk p : " <<>
getch();
}
Dari hasil yang diberikan oleh program di atas terlihat bahwa sebuah pointer yang bertipe void dapat digunakan untuk menunjuk tipe data int, double, dan char
Melewatkan Array Menggunakan Pointer
Selain yang telah disebutkan di atas, pointer juga dapat berfungsi untuk melewatkan variabel yang bertipe array di dalam sebuah fungsi. Berikut ini dituliskan dua buah contoh program yang dapat menjelaskan pernyataan ini.
Program yang ditulis tanpa menggunakan pointer
Ekspresi dibawah ini semuanya benar, perhatikan :
andy = 25;
&andy = 1776;
ted = 1776;
*ted = 25;
Ekspresi pertama merupakan assignation bahwa andy = 25;. Kedua, menggunakan operator alamat (address/derefence operator (&)), sehingga akan mengembalikan alamat dari variabel andy. Ketiga bernilai benar karena assignation untuk ted adalah ted = &andy;. Keempat menggunakan reference operator (*) yang berarti nilai yang ada pada alamat yang ditunjuk oleh ted, yaitu 25. Maka ekspresi dibawah ini pun akan bernilai benar :
*ted = andy;
#include "iostream.h"
void tulis_array (int A[], int n)
{
for (int j=1; j<=n; j++)
{
A[j] = j * 10;
cout<<
}
}
int main()
{
int B[10];
int X = 5;
tulis_array (B, X); //memanggil fungsi tulis_array
getch();
}
PROGRAM YANG DI TULIS DENGAN POINTER:
#include "conio.h"
#include "iostream.h"
void tulis_array (int *A, int n)
{
for (int j=1; j<=n; j++)
{
A[j] = j * 10;
cout<<
}
}
int main()
{
int B[10];
int X = 5;
tulis_array (B, X); //memanggil fungsi tulis_array
getch();
}
Hasilnya
Elemen-elemen array biasanya diakses melalui indeksnya, sebenarnya ada cara lain yang lebih efisien, yaitu dengan menggunakan pointer. Pointer semacam ini disebut dengan istilah pointer aritmetika. Konsep dasar dari pointer aritmetika ini adalah melakukan operasi aritmetika terhadap variabel yang bertipe pointer. Misalnya kita mempunyai 5 buah data bertipe int yang disimpan dalam bentuk array dengan nama A dan digambarkan sebagai berikut :
| 24 | 32 | 81 | 44 | 23 |
| P | | | P+3 | |
Jika kita mempunyai pointer p, maka kita dapat mengakses elemen-elemen array di atas dengan cara melakukan operasi terhadap p. Berikut contoh program yang akan mengilustrasikan kasus tersebut.
#include "conio.h"
#include "iostream.h"
int main()
{
int A[5];
int *p;
A[0] = 24;
A[1] = 32;
A[2] = 81;
A[3] = 44;
A[4] = 23;
p = &A[0]; //mula-mula p menunjuk elemen pertama array
cout <<"Alamat p : " << style=""> <<>
cout <<"Nilai p : " << *p <<>
cout <<>
p = p + 3; //melakukan proses aritmetika pada pointer
cout <<"Alamat p : " << style=""> <<>
cout <<"Nilai p : " << *p <<>
getch();
}
Pada pembahasan pointer terdapat sebuah tipe data yang kerap kali digunakan, yaitu tipe reference. Tipe reference sebenarnya merupakan alias (julukan/ nama lain) dari variabel yang dideklarasikan dengan menggunakan tipe data tertentu. Misalnya kita mendeklarasikan sebuah variabel x yang bertipe int dan kita akan membuat alias (dengan nama n) dari variabel tersebut, maka hal yang harus dilakukan adalah mendeklarasikan alias tersebut menggunakan tipe reference yang dituliskan dengan int&. Berikut ini sintak yang menjelaskan contoh di atas.
Int x; //mendeklarasikan variabel x dengan int
Int& n = x; //mendeklarasikan n (yang merupakan alias x) dengan tipe reference
//(int&)
Alias n dibuat dengan cara mengakses alamat yang ditempati oleh variabel x, yaitu dengan menggunakan tanda &. Oleh karena n merupakan alias dari x, maka x dan n akan mempunyai nilai yang sama atau dengan kata lain keduanya akan saling mempengaruhi.
Pointer NULL
Pada saat program dijalankan, pointer akan menunjuk ke alamat acak pada memori, sehingga diperlukan inisialisasi agar hal tersebut tidak terjadi. Dalam C++ terdapat sebuah cara untuk membuat pointer tidak menunjuk ke alamat manapun, yaitu dengan mengisikan ponter tersebut dengan nilai NULL. Karena hal inilah maka pointer tersebut sering dinamakan pointer NULL (NULL Pointer). Sebagai contoh kita mempunyai pointer p, dan kita ingin melakukan inisialisasi pada pointer tersebut dengan nilai NULL, maka sintaknya adalah sebagai berikut.
![]()
Operasi-operasi Pointer
Operasi Penugasan
Suatu variabel pointer seperti halnya variabel yang lain, juga bisa mengalami operasi penugasan. Nilai sari suatu variabel pointer dapat disalin ke variabel pointer yang lain.
Contoh Program :
#include “stdio.h”
#include “conio.h”
void main()
{
float *x1, *x2, y;
clrscr();
y = 13.45;
x1 = &y; //alamat dari y disalin ke x1
x2 = x1; //isi variabel x1 disalin ke x2
printf(“Nilai variabel y= %.2f ada di alamat %p\n”,y,x1);
printf(“Nilai variabel y= %.2f ada di alamat %p\n”,y,x2);
getch();
}
Suatu variabel pointer hanya dapat dilakukan operasi aritmatika dengan nilai integer saja. Operasi yang biasa dilakukan adalah operasi penambahan dan pengurangan.
Contoh program :
#include “stdio.h”
#include “conio.h”
void main ()
{
int nilai [3], *penunjuk;
clrscr();
nilai[0] = 125;
nilai[1] = 345;
nilai[2] = 750;
penunjuk = &nilai[0];
printf(“Nilai %i ada di alamat memori %p\n”, *penunjuk,penunjuk);
printf(“Nilai %i ada di alamat memori %p\n”, *(penunjuk + 1),penunjuk + 1);
printf(“Nilai %i ada di alamat memori %p\n”, *(penunjuk + 2),penunjuk + 2);
getch ();
}
Operasi Logika
Operasi logika juga dapat dilakukan pada sebuah variabel pointer. Contoh programnya :
#include “stdio.h”
#include “conio.h”
void main ()
{
int a = 100, b = 200, *pa, *pb;
clrscr ();
pa = &a;
pb = &b;
if (pa <>
printf(“pa menunjuk ke memori lebih rendah dari pb\n”);
if (pa == pb)
printf(“pa menunjuk ke memori yang sama dengan pb\n”);
if (pa > pb)
printf(“pa menunjuk ke memori yang lebih tinggi dari pb\n”);
getch ();
}
Referensi
POINTER
Bahasa Pemrograman Terstruktur
Devid Haryalesmana,
Azhar Ahmad,
Lilik Emi Rahayu,
Bian Dwi Pamungkas,
JURUSAN TEKNIK ELEKTRO
PROGRAM STUDI S1 PENDIDIKAN TEKNIK INFORMATIKA
FAKULTAS TEKNIK
UNIVERSITAS NEGERI MALANG
Tidak ada komentar:
Posting Komentar