Selasa, 26 Februari 2019

POINTER


Pointer Dalam Bahasa C++

A. Pengertian Pointer
     Pointer adalah sebuah variabel yang berisi alamat lain. Suatu pointer dimaksudkan untuk menunjukan ke suatu alamat memori sehingga alamat dari suatu variabel dapat diketahui dengan mudah.Intinya:
a. Pointer adalah suatu variabel yang menunjuk ke alamat memory variabel yang lainnya.
b. Variabel pointer berisi suatu alamat (alokasi memory).
Pointer adalah built-in type di C dan C++, dimana C++ mengambil konsep pointer dari C. Pointer sebenarnya sangat terkait dengan "Abstract C Machine", yaitu model mesin abstrak dimana program C bekerja. Abstract C Machine adalah mesin abstrak dimana mesin tersebut memiliki prosesor untuk   menginterpretasikan   stream   of   instruction,   dan   addressable memory  yang  terbagi  kedalam  3 bagian  : 
      1.      automatic  memory
      2.      static memory 
      3.      free  memory. 
 Automatic  memory,  static memory  dan  free  memory.  Addressable memory adalah memory  yang konten-nya  dapat  diambil  jika  diketahui  alamatnya.  Lebih  jauh  lagi, terdapat asumsi bahwa konten memori dapat di ambil dengan waktu konstan, tidak peduli berapa nilai alamat.Hal ini disebut dengan Random Access Memory.
Pointer  adalah  sebuah  variabel  yang  berisi  alamat  lain.  Suatu  pointer dimaksudkan untuk menunjukan ke suatu alamat memori sehingga alamat dari suatu variabel dapat diketahui dengan mudah. Arti pointer dalam bahasa sehari-hari adalah putunjuk atau bisa di bilang penentu atau pointer secara sederhana bisa diartikan sebagai tipe data yang nilainya mengarah pada nilai yang terdapat pada sebuah area memori (alamat memori).namun dalam
Dalam  bahasa  C,  Pointer  bisa  berfungsi  sebagai  variabel  array  berarti
pointer sebagai penunjuk elemen array ke-0 dalam variabel C. 

B.   Fungsi Pointer
Adapun fungsi dari pointer yaitu :
      1.      Kegunaan pointer yang utama adalah untuk menyimpan alamat memori dari sebuah variabel (data type atau object dari class). Selain menyimpan alamat dari variabel, pointer juga dapat digunakan untuk menyimpan alamat dari sebuah fungsi (function pointer).
     2.      Function pointer telah digunakan sejak dikenalkannya bahasa C,dan banyak digunakan untuk sebuah fungsi callback atau untuk meningkatkan readability dari sebuah code.  Anda dapat memperlakukan function pointer seperti pointer biasa (pointer ke datatype/object), anda dapat menyimpan,mengirimkan, merubah address, atau meng-evaluasi address dari pointer ke fungsi ini dengan sifat tambahan anda dapat memanggil fungsi yang ditunjuk oleh function pointer. Pointer  juga berguna untuk :
a.        Mengirimkan  “Parameter  yang  berupa  variabel”  ke  dalam  fungsi,  artinya  nilai variabel bisa diubah di dalam fungsi.
b.      Untuk membuat variabel DINAMIS (Bukan variabel Statis) penggunaan function pointer pada C++ dibatasi, yaitu function pointer tidak boleh menunjuk pada function yang berada dalam sebuah class (class member function) kecuali function tersebut berjenis static.
c.        Karena pointer dapat meningkatkan kinerja untuk operasi yang dilakukan secara berulang. Dengan syarat Kalau mendeklarasikan pointer kedalam array, tidak boleh menggunakan tanda bintang.
d.       Pointer juga di gunakan untuk mengalokasikan tempat pada memori secara dinamis yakni dapat diubah-ubah alokasi tempatnnya pada memori data yang dimasukkan sebagai nilai pointer akan selalu tersimpan sehingga diperlukan penghapusan yang tujuannya   untuk   mengosongkan   memori,   perintah   yang   digunakan   untuk menghapus memori adalah delete [] nama variable.

C.   Penggunaan Awal Pointer
 Tipe Data 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 &.
a.       int x;
b.      int *ptr;
c.       ptr = &x;

2. Mensubstitusikan address awal sebuah array ke pointer
a. char t[5];
b. char *ptr;
c. ptr = t;

3. Mensubstitusikan address salah satu elemen array dengan address operator char t[5] ;
a. char *ptr; ptr = &t[3];

4. Mensubstitusikan address awal character string ke pointer char
a. 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.

D.  Operator Pointer
Ada 2 operator pointer yang dikenal secara luas, yaitu operator & dan operator *.
1.   Operator &
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;


2.   Operator *
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. 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;


E.   Macam – macam Pointer
1.   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.
2.   Pointer Aritmetika
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.
3.   Pointer NULL
Pada  saat  program  dijalankan,  pointer  akan  menunjuk  ke  alamat  acak  pada memori,sehingga diperlukan inisialisasi agar hal tersebut tidak terjadi. Dalam C++ terdapatsebuah cara untuk membuat pointer tidak menunjuk ke alamat manapun, yaitu denganmengisikan ponter tersebut dengan nilai NULL. Karena hal inilah maka pointer tersebutsering dinamakan pointer NULL (NULL Pointer). Sebagai contoh kita  mempunyai  pointer  p,  dan  kita  ingin  melakukan  inisialisasi  pada  pointertersebutdengan nilai NULL maka sintaknya adalah sebagai berikut. P=NULL;


F.   Contoh Program
#include <iostream>
#include<string>

using namespace std;

int main ()
{
    int *ptrArray;
    int A[5] = {1,3,5,7,9};

    ptrArray = A;

    //cout << "Nilai dari ptrArray    :" <<ptrArray=2<<endl;
    for(int i=0 ; i<=4 ; i++)
    {
       cout << A[i] <<" ";
    }

      cout <<"\n PAKAI POINTER" <<endl;
      for(int i=0 ; i<=4 ; i++)
    {
       cout << *ptrArray+i<<" ";
    }
}


G. Hasil Running
 
 
REFERENSI:

Tidak ada komentar:

Posting Komentar