Langsung ke konten utama

Mengenal Pointer Pada C++

Pointer sesungguhnya berisi alamat dari suatu data, bukan data sebagaimana variabel biasa. Dengan kata lain pointer adalah variabel yang berisi alamat memori sebagai nilainya dan berbeda dengan variabel biasa yang berisi nilai tertentu.



Mengetahui Alamat variabel
Alamat dari variabel dapat diketahui dengan menambahkan operator alamat berupa simbol & di depan nama variabel.
Contoh program :
   /**
  * -------------------------------  
  * Mengetahui alamat variabel
  * -------------------------------  
  **/ 
  #include <iostream.h> 
  #include <conio.h> 
  void main() 
  { 
    clrscr(); 
    int a = 11; 
    float b = 12.4; 
    double c = 12.23456; 
    cout<<"Isi Variabel :"<<endl; 
    cout<<"a = "<<a<<endl; 
    cout<<"b = "<<b<<endl; 
    cout<<"c = "<<c<<endl; 
    cout<<"\nAlamat Variabel :"<<endl; 
    cout<<"a = "<<&a<<endl; 
    cout<<"b = "<<&b<<endl; 
    cout<<"c = "<<&c<<endl; 
    getch(); 
  } 


Output :
Isi Variabel :
a = 11
b = 12.4
c = 12.2346
Alamat Variabel :
a = 0x0012ff88
b = 0x0012ff84 c = 0x0012ff7c


Mendefinisikan Variabel Pointer
Suatu variabel pointer didefinisikan dengan bentuk sebagai berikut :
    - tipe_data dapat berupa sembarang tipe seperti halnya pada pendefinisian variabel bukan pointer.
   - nama_variabel adalah nama variabel pointer
    - * adalah operator memori yang fungsinya untuk mengembalikan nilai variabel pada alamatnya yang ditentukan oleh operator.
Supaya suatu variabel menunjuk ke variabel lain, mula-mula harus diisi dengan alamat dari variabel yang hendak ditunjuk.
Contoh program :
/** 
* ------------------------------- 
* Definisi Variabel Pointer
* ------------------------------- 
**/ 
  #include <iostream.h> 
  #include <conio.h> 

  void main() 
  { 
    int var_int = 55;     // Variabel bukan pointer 
    int *poin_int;           // Variabel pointer 
    clrscr(); 
    poin_int = &var_int;     // Pointer menunjuk ke vint 
    cout << "Alamat var_int = " << &var_int << endl; 
    cout << "poin_int = " << poin_int << endl; 
    getch(); 
  }


Output :
Alamat var_int = 0x0012ff88
poin_int = 0x0012ff88


Pada program diatas :
     cout << "poin_int = " << poin_int << endl;
ternyata menampilkan isi pointer itu sendiri, bukan isi dari variabel vint.
Mengakses Nilai yang ditunjuk Pointer
Berdasarkan contoh program diatas, nilai dari var_int dapat diakses melalui poin_int setelah pernyataan :
       poin_int = &var_int
dijalankan. Caranya dengan melibatkan operator “tak langsung”. Operator ini berupa simbol “ * “ dan diletakkan di depan nama variabel pointer.
Contoh
     *poin_int
     tipe_data *nama_variabel


Contoh program :
/** 
* ------------------------------- 
* Mengakses nilai yg ditunjuk pointer
* ------------------------------- 
**/ 
#include <iostream.h> 
#include <conio.h> 
void main() 
{ 

  int var_int = 60;       // Variabel bukan pointer 
  int *poin_int;           // Variabel pointer 
  clrscr(); 
  poin_int = &var_int;     // Pointer menunjuk ke vint 
  cout << " Nilai yang ditunjuk oleh pint =  " 
  << *poin_int << endl; 
  getch(); } 


Output:
Nilai yang ditunjuk oleh pint = 60

Pointer void
Untuk membuat pointer yang tidak bertipe yakni dengan meletakkan kata kunci pada void pada bagian penentu tipe pointer.
Contoh :
     void *ptr;
Merupakan pernyataan untuk mendefinisikan ptr sebagai variabel pointer void.
Suatu pointer void adalah pointer yang dapat menunjuk ke sembarang tipe data. Misalnya, Anda dapat mengatur agar pointer ini menunjuk ke tipe data int, tetapi di saat lain diperlukan untuk menunjuk data bertipe float.
Contoh program :
/** 
* ------------------------------- 
* Pointer Void
* ------------------------------- 
**/ 
#include <iostream.h> 
#include <conio.h> 
void main() 
{ 
  clrscr(); 
  void *ptr;            // Pointer tak bertipe 
  int vint = 45; 
  float vfl = 17.5; 
  ptr = &vint;             // menunjuk ke int 
  cout << "Nilai yang ditunjuk oleh ptr = " 
  << *(int *)ptr << endl; 
  ptr = &vfl;              // menunjuk ke float 
  cout << "Nilai yang ditunjuk oleh ptr = "<< *(float *) ptr << endl; 
  getch(); 
} 


Output :
Nilai yang ditunjuk oleh ptr = 45
Nilai yang ditunjuk oleh ptr = 17.5 


Dari program diatas bahwa variabel pointer ptr dapat menunjuk ke tipe int ataupun float.
Pointer dapat pula digabungkan dengan array, karena pada umumnya antara pointer dan array mempunyai kesamaan.
Contoh program :
#include <iostream.h> 
#include <conio.h> 
void main() 
{ 
  clrscr(); 
  int tgl_lahir[] = {28, 11, 1982 }; 
  int *poin_tgl; 
  poin_tgl = tgl_lahir;           // ptgl menunjuk ke array 
  cout << "Nilai yang ditunjuk poin_tgl  : " 
  << *poin_tgl << endl; 
  cout << "Nilai dari tgl_lahir[0]       : " 
  << tgl_lahir[0] << endl; 
  getch(); 
} 

Output :
Nilai yang ditunjuk poin_tgl : 28
Nilai dari tgl_lahir[0] : 28 


Setelah penugasan poin_tgl = tgl_lahir ptgl akan menunjuk ke elemen pertama (tgl_lahir[0]) dari array tgl_lahir.
Untuk mengakses semua tanggal dapat dilakukan dengan perintah : 
     for (int i=0;i<3;i++)
    cout<<*(poin_tgl+i)<<endl;


Array Pointer
Suatu array bisa digunakan untuk menyimpan sejumlah pointer. Sebagai contoh :
     char *namahari[7];
merupakan pernyataan untuk mendefinisikan array namahari yang berisi 7 buah elemen berupa pointer. Pointer ini menunjuk ke data bertipe char.
Contoh program :
/** 
* ------------------------------- 
* Array Pointer
* ------------------------------- 
**/ 
#include <iostream.h> 
#include <conio.h> 

void main() 
{ 
  clrscr(); 
  char *namahari[] = {"Senin", "Selasa", "Rabu", "Kamis","Jumat","Sabtu", "Minggu"}; 
  for (int i = 0; i < 7; i++) 
     cout << namahari[i] << endl; 
  getch(); 
}

Output :
Senin
Selasa
Rabu
Kamis
Jumat
Sabtu
Minggu

Pointer Menunjuk Pointer
Suatu pointer bisa menunjuk ke pointer lain

Untuk membentuk rantai seperti gambar diatas diperlukan pendefinisian sebagai berikut :
int var_x; //Variabel bertipe int
int *ptr1; //Variabel pointer yg menunjuk ke data bertipe int
int **ptr2; //Variabel pointer yg menunjuk ke pointer int

--> --> --> Agar ptr1 menunjuk ke variabel var_x, perintah yang diperlukan berupa :
          ptr1 = &var_x;
Sedangkan supaya ptr2 menunjuk ke ptr1, diperlukan perintah :
          ptr2 = &ptr1;
Contoh :
/** 
* ------------------------------- 
* Pointer Menunjuk Pointer
* ------------------------------- 
**/ 
#include <iostream.h> 
#include <conio.h> 
void main() 
{ 
  clrscr(); 
  int var_x = 2345; 
  int *ptr1;         //pointer ke variabel bukan pointer 
  int **ptr2;        //pointer ke pointer 
  cout << "var_x = " << var_x << endl; 
  //penugasan alamat 
  ptr1 = &var_x; 
  ptr2 = &ptr1; 
  //Mengakses nilai var_x melalui ptr1 
  cout << "*ptr1 = " << *ptr1 << endl; 
  //Mengakses nilai var_x melalui ptr2 
  cout << "**ptr2 = " << **ptr2 << endl; 
  getch(); 
} 

Output :
var_x = 2345
*ptr1 = 2345
**ptr2 = 2345


Pointer Dan Fungsi
Pointer biasa digunakan di dalam argumen fungsi kalau nilai argumen dimasudkan untuk diubah di dalam fungsi.
Pointer Sebagai Argumen Fungsi
/** 
* ------------------------------- 
* Pointer Sebagai Argumen Fungsi
* ------------------------------- 
**/ 
#include <iostream.h> 
#include <conio.h> 
void ubah_nilai(int &x); 
void main() 
{ 
  clrscr(); 
  int pinokio = 80; 
  cout << "Nilai mula-mula untuk pinokio : " 
  << pinokio << endl; 
  ubah_nilai(pinokio); 
  cout << "Nilai untuk pinokio sekarang  : " 
  << pinokio << endl; 
  getch(); 
} 
//Definisi fungsi 
void ubah_nilai(int &x) 
{ 
  x = 95; 
}

Output :
Nilai mula-mula untuk pinokio :80
Nilai untuk pinokio sekarang : 95

dengan menuliskan & didepan argumen fungsi, nilai argumen dapat diubah didalam fungsi. hal serupa dapat diimplentasikan didalam pointer sebagai berikut :

#include <iostream.h> 
#include <conio.h> 
void ubah_nilai(int *x); 
void main() 
{ 
  clrscr(); 
  int pinokio = 80; 
  cout << "Nilai mula-mula untuk pinokio : " 
  << pinokio << endl; 
  ubah_nilai(&pinokio); 
  cout << "Nilai untuk pinokio sekarang  : " 
  << pinokio << endl; 
  getch(); 
} 

  //Definisi fungsi 
void ubah_nilai(int *x) 
{ 
  *x = 95; 
} 

Perbedaan :
  • Fungsi ubah_nilai() didefinisikan sebagai judul berupa void ubah_nilai(int *x) 
  • Pada saat fungsi dipanggil argumen perlu ditulis dengan awalan & (&pinokio) 
  • Prototipe fungsi disesuaikan dengan definisi fungsi : void ubah_nilai(int *x); 
  • Didalam fungsi ubah_nilai(), tanda * perlu diberikan di depan nama argumen : *x=95;

Komentar

Posting Komentar

Kritik, Saran dan Komentar Kami tunggu

Postingan populer dari blog ini

Kekuatan dan Kelemahan Tipe - Tipe Pokemon

Tipe - Tipe Pokemon Demam pokemon kian menginkat, buat kami yang gemar memainkannya mimin beri daftar kekuatan dan kelemahan tiap tipe pokemon agar membatu dalam battel di gym. tiap - tiap pokmon dikelompokan kedalam 18 tipe yang berbeda diantarnya  Normal, Fighting, Flying, Poison, Ground, Rock,Steel, Fire, Psychic, Ice,  Bug, Grass, Water, Electric, Ghost, Dragon, Fairy dan Drak Setiap Pokemon dapat memiliki satu atau dua Tipe sekaligus. Contoh, Pikachu merupakan Pokemon bertipe Electric, sedangkan Bulbasaur merupakan Pokemon dengan Tipe Grass sekaligus Poison. Ada total 151 Pokemon, 84 diantaranya hanya memiliki satu Tipe sedangkan 67 Pokemon memiliki dua Tipe. Pokemon yang tipenya sama, memiliki kekuatan dan kelemahan yang sama juga saat Battle. Misal, Pokemon Tipe Poison melawan Tipe Poison, damage yang akan diterima akan setara. Di sisi lain, Pokemon Tipe Water mampu melakukan attack dengan damage besar ke Pokemon Tipe Fire yang lemah terhadap ser...

Menyembunyikan Pesan Error Notice: Undefined index

Pada pembahasan kali ini kita akan membahas bagai mana cara menghilangkan Notice: Undefined index:,  Sebelum kita mengetahui cara menghilangkan pesan error  Notice: Undefined index:,  yang perlu kita ketahui adalah maksud atau arti dari pesan error tersebut.  Notice: Undefined index: merupakan sebuah pesan dari variabel atau  Constanta yang tidak memiliki nilai (value). Jadi variabel atau contanta tersebut merupakan variabel kosong, lalu bagaimana cara menghilangkan pesan tersebut, berikut caranya : sebagai contoh kita ketikan script php seperti dibawah ini : <html> <head> </head> <body> <a href='?pg=1'>Hal 1</a> <a href='?pg=2'>Hal 2</a> <a href='?pg=3'>Hal 3</a> <?php     if($_GET['pg']== 1)         echo "Ini halaman 1";     elseif($_GET['pg']== 2)         echo "In...

Crystal Report Error : Failed to load database infromation

Ketika menjalankan crystal report tiba - tiba terjadi error dengan pesan Failed to load database infromation, usut punya usut ternyata penyebabnya adalah windows 10. Gambar : Error Crystal Report Tapi tenang saja berikut ini saya akan bahas cara penyelesaianya Masuk ke file yourApp.exe.config. Cari code <?xml version="1.0" encoding="utf-8" ?> <configuration>     <startup>          <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />     </startup> </configuration> Ubah menjadi <?xml version="1.0"?> <configuration> <startup useLegacyV2RuntimeActivationPolicy="true"><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup> </configuration> Kemudian coba lagi jalankan print dengan crystal report.  Source http://stackoverflow.com/questions/15951142/appcrash-on-s...