Monday, April 28, 2014

Pointer pada bahasa pemograman C++ (Bag 1)

Pointer adalah sebuah variabel yang berfungsi untuk menampung alamat memori. sedangkan variabel biasa hanya berfungsi untuk menyimpan nilai, misal nilai angka, karakter, dll.

apa itu alamat memori?
jika kita mendeklarasikan sebuah variabel, maka variabel tersebut akan di simpan didalam sebuah alamat memori. Untuk membuktikannya, saya akan membuat 4 buah variabel dan menampilkan alamat memori masing-masing variabel tersebut.
Untuk menampilkan alamat memori sebuah variabel caranya adalah dengan menambahkan tanda "&"  di depan nama variabel.
contoh : &x

Contoh program menampilkan alamat memori variabel a, b, c, dan d.

#include <iostream>
#include <cstdlib>

using namespace std;

int main()
{
 int a, b, c, d;
 
 cout<<"Alamat variabel a = "<<&a<<endl;
 cout<<"Alamat variabel b = "<<&b<<endl;
 cout<<"Alamat variabel c = "<<&c<<endl;
 cout<<"Alamat variabel d = "<<&d<<endl;

 system("pause");
 return 0;
}

Hasil
variabel pointer inilah yang akan menyimpan alamat memori yang tertampil pada area kotak merah di atas.
Jika sebuah pointer telah menyimpan alamat memori variabel a, maka pointer tersebut juga akan memiliki nilai dari variabel a, dan bisa mengendalikan variabel a.

untuk membuat sebuah variabel pointer caranya adalah dengan menambahkan tanda bintang (*) di depan nama variabel.
contoh : tipe_data *p

Contoh program penggunaan variabel :

#include <iostream>
#include <cstdlib>

using namespace std;

int main()
{
 int a = 10;
 int *p;
 
 //mengisi pointer p dengan alamat variabel a
 p = &a;
 //Menampilkan isi dari pointer p
 cout<<"Isi pointer p = "<<p<<endl;
 //Menampilkan nilai pointer p yang merupakan isi dari variabel a
 cout<<"Nilai pointer p = "<<*p<<endl;
 //Menampilkan nilai variabel a
 cout<<"Nilai variabel a = "<<a<<endl;
 
 //Merubah nilai pointer p
 *p = 100;
 
 //Menampilkan nilai variabel a setelah terjadi perubahan nilai di pointer p
 cout<<"Nilai variabel a setelah nilai pointer p di rubah = "<<a<<endl;
 

 system("pause");
 return 0;
}
Hasil :

Dari program di atas dapat disimpulkan bahwa :
jika sebuah pointer di isi dengan alamat variabel a, maka pointer tersebut akan menyimpan alamat (0x22fed8) dan nilai (10) dari variabel a.
Jika sebuah pointer di isi dengan alamat variabel a, maka pointer tersebut bisa mengendalikan variabel a.
Jika nilai pointer p di rubah, maka nilai variabel a juga berubah.
Jika nilai variabel a di rubah maka nilai pointer p juga berubah

catatan :
Untuk menampilkan isi pointer p, cukup ketikan cout<<p;
Untuk menampilkan nilai pointer p, cukup ketikan cout<<*p;

Pada kasus di atas akan tampil keluaran seperti ini :
0x22fed8
10

Konstanta pada pointer
Sama seperti variabel biasa, pointer juga dapat bersifat konstan. Adapun caranya juga sama yaitu dengan menggunakan kata kunci const. Namun perlu di perhatikan bahwa penempatan kata kunci const yang salah akan menyebabkan perbedaan arti. Kata kunci const dapat di tempatkan sebelum tipe data, sesudah tipe data ataupun pada keduanya (sebelum dan sesudah).

a). Sebelum tipe data
bentuk umumnya adalah sebagai berikut :
const tipe_data *nama_pointer;

Bentuk di atas berarti bahwa pointer akan menunjuk ke nilai dengan tipe data tertentu, dimana nilai tersebut bersifat tetap.
Contoh program :

#include <iostream>
#include <cstdlib>

using namespace std;

int main()
{
 const int *p; //NIlai yang di tunjuk oleh pointer p adalah tetap
 int x, y;
 
 x = 5;
 y = 10;
 
 p = &x;
 /*Jika menuliskan seperti ini maka salah :
  *    *p = 2
  * karena nilai dari pointer p bersifat tetap  */
  
 p = &y; //Ini benar, karena ponter p tidak bersifat tetap
 
 cout<<"Nilai pointer p sekarang = "<<*p<<endl;
 
 system("pause");
 return 0;
}

b). Sesudah tipe data
Bentuk umumnya seperti berikut :
tipe_data *const nama_pointer

Berbeda dengan sebelumnya, disini pointer bersifat tetap sehingga alamatnya tidak bisa dirubah. Namun nilai dari variabel yang di tunjuk. dapat dirubah.
contoh program :

#include <iostream>
#include <cstdlib>

using namespace std;

int main()
{
 int x = 5, y = 10;
 
 int *const p = &x; //Isi / alamat yang di tunjuk oleh pointer p adalah tetap
 
 /*Jika menuliskan seperti ini maka salah :
  *    p = &y
  * karena isi / alamat dari pointer p bersifat tetap  */
  
 *p = 10; //Ini benar, karena nilai ponter p tidak bersifat tetap
 
 cout<<"Nilai pointer p sekarang = "<<*p<<endl;
 
 system("pause");
 return 0;
}

c). Sebelum dan sesudah tipe data
Bentuk umumnya adalah seperti berikut :
const tipe_data *const nama_pointer
Bentuk yang ketiga ini merupakan bentuk gabungan dari bentuk pertama  dan kedua. Artinya disini kita mendeklarasikan pointer konstan yang menunjuk ke suatu nilai yang konstan pula. Dengan kata lain pointer ini menunjuk alamat yang tetap dimana alamat tersebut berisi nilai yang tetap.
Contoh program :

#include <iostream>
#include <cstdlib>

using namespace std;

int main()
{
 int x = 5;
 int y = 10;
 
 const int *const p = &x;
 /* p akan menunjuk ke alamat
 * yang tetap, yaitu alamat x, dan nilai yang di tunjuk juga tetap
 *    *P = 2 MAKA SALAH
 *    p = &y MAKA SALAH
 */
 
 cout<<"Nilai pointer p sekarang = "<<*p<<endl;
 
 system("pause");
 return 0;
}

hasil:


Next Bagian 2