teoribuku

Pointer Dalam Bahasa C++

Pointer (variabel penunjuk) adalah suatu variabel yang berisi alamat memori dari suatu variabel lain. Alamat ini merupakan lokasi dari variabel lain di dalam memori. Dengan kata lain, pointer berisi alamat dari variabel yang mempunyai nilai tertentu.

Suatu pointer di dalam program dimaksudkan untuk menunjuk ke suatu alamat memori. Misalnya suatu variabel X yang bertipe int dengan nilai 12 dan disimpan di memori pada alamat 0xfff2, P adalah pointer yang disimpan dalam alamat memori 0xfffA maka nilai yang ada didalam alamat 0xfffA adalah alamat dari variabel X yaitu 0xfff2.

Operator Pointer
Suatu pointer dapat berisi alamat dari suatu variabel lain dan untuk dapat mengakses nilai yang ada di dalam variabel berpointer secara langsung dapat dilakukan dengan menggunakan operator. Ada dua operator pointer yang disediakan oleh Borland C++, yaitu:
  • Operator Deference ( & )
  • Operator reference ( * )

1.  Operator Deference ( & )
Pada umumnya kita tidak dapat menentukan di mana variabel akan ditempatkan dalam memori, karena penempatan suatu variabel ditentukan oleh sistem operasi. Untuk suatu keperluan tertentu terkadang kita harus mengetahui alamat suatu variabel di dalam memori. Dengan demikian, untuk dapat mengetahui alamat suatu variabel di dalam memori kita dapat melakukannya dengan menggunakan operator deference ( & ) atau operator alamat (address operator) di depan nama variabel yang alamatnya akan diketahui. Operator & bersifat unary (hanya melakukan satu operand saja) dan Operator & menghasilkan alamat dari operandnya. Untuk memperoleh alamat dari suatu variabel dapat kita lakukan dengan bentuk:

Nama_var_pointer = &variabel;

Sebagai contoh, misalkan deklarasi sebagai berikut:
                int x = 8;
                int *xPtr;
Misalkan x yang bernilai 8 disimpan di memori pada alamat 0x0012ff50. xPtr disimpan dalam memori pada alamat 0x0012ff4c yang berisi alamat dari variabel x. Sehingga untuk mengetahui nilai yang ada pada alamat yang disimpan oleh xPtr dapat kita lakukan seperti pernyataan berikut dan nilai variabel dapat kita lihat pada Gambar 1.

xPtr = &x;

Gambar 1. Nilai dan Alamat Variabel di Memori

/* Program Pointer */

#include<iostream.h>
#include<conio.h>

void main()
{
     int x=8;
     int *xPtr;
     xPtr = &x;
     cout<<"Nilai x = "<<x<<endl;
     cout<<"Alamat x = "<<x<<endl;
     cout<<"Alamat x = "<<xPtr<<endl;
     cout<<"Nilai yang disimpan pada alamat ";
     cout<<xPtr<<" adalah "<<*xPtr;
     getch();
}


2.  Operator Reference ( * )
Digunakan untuk mengakses secara langsung nilai yang terdapat di dalam alamat yang merupakan nilai dari variabel pointer. Dilakukan dengan menambahkan operator reference ( * ) di depan nama variabel, agar dapat menerjemahkan nilai sebenarnya dari suatu variabel. Operator ini biasa disebut dengan value pointed by. Dengan menggunakan operator * ini akan dihasilkan nilai yang berada pada suatu alamat memori. Operator * bersifat unary (hanya memerlukan satu operand saja).

Sebagai contoh, misalkan deklarasi sebagai berikut:
                int x =8, y;
                int *Ptr;
Misalkan x yang bernilai 8 disimpan di memori pada alamat 0x0012ff50, xPtr disimpan dalam memori pada alamat 0x0012ff4c yang berisi alamat dari variabel x. Untuk mengetahui nilai yang ada pada alamat yang disimpan oleh xPtr dapat kita lakukan seperti pernyataan berikut dan nilai variabel dapat kita lihat pada gambar 2.

y = *xPtr;

 Gambar 2. Nilai dari Alamat yang Disimpan Variabel Pointer

/* Program Pointer */

#include<iostream.h>
#include<conio.h>

void main()
{
     int x=8, y;
     int *xPtr;
     xPtr = &x;
     y = *xPtr;
     cout<<"Nilai x = "<<x<<endl;
     cout<<"Alamat x = "<<x<<endl;
     cout<<"Alamat x = "<<xPtr<<endl;
     cout<<"Nilai yang disimpan pada alamat ";
     cout<<xPtr<<" adalah "<<y;
     getch();
}

Deklarasi Pointer
Seperti halnya variabel yang lain, variabel pointer juga harus dideklarasikan terlebih dahulu sebelum digunakan.

Bentuk Umum:
tipe_data *nama_var_pointer
dimana:
-          tipe_data dapat berupa sebarang tipe seperti haknya pada pendeklarasian variabel bukan pointer
-          nama_var_pointer adalah nama variabel pointer yang menunjuk ke data bertipe tipe_data

Contoh:
                int *xPtr;
                char *Karakter;

mendeklarasikan xPtr merupakan variabel pointer yang menunjuk ke data bertipe int dan Karakter merupakan variabel pointer yang menunjuk ke data bertipe char.

Tipe data pointer mendefinisikan tipe dari objek yang ditunjuk oleh pointer. Secara teknis, tipe appa pun dari pointer dapat menunjukkan lokasi (di manapun) dalam memori. Bahkan operasi pointer dapat dilaksanakan relatif terhadap tipe dasar apa pun yang ditunjuk.

Contoh, ketika kita mendeklarasikan pointer dengan tipe int*, kompiler akan menganggap alamat yang ditunjuk menyimpan nilai integer –walaupun sebenarnya bukan (sebuah pointer int* selalu menganggap bahwa ia menunjuk ke sebuah objek bertipe integer, tidak peduli isi sebenarnya). Karenanya, sebelum mendeklarasikan sebuah pointer, pastikan tipenya sesuai dengan tipe objek yang akan ditunjuk.

Pointer dan Array
Pointer dan Array mempunyai hubungan yang dekat. Secara internal array juga menyatakan alamat, dimana pengenal array sama dengan alamat pada elemen pertama pada array. Jika kita mau mengisi alamat suatu variabel ke dalam suatu variabel pointer maka dapat dilakukan dengan menggunakan operator &, misalnya xPtr = &x, yang berarti mengisi xPtr dengan alamat dari variabel x. Hal ini berlaku hanya untuk variabel yang bukan variabel array. Tetapi jika variabel array tidak perlu menggunakan operator &.

Misalnya kita mempunyai suatu deklarasi berikut:
            int Nilai[]={45, 23, 50, 8, 12, 10, 15};
     int *Ptr_Nilai;

agar Ptr_Nilai menunjuk ke array Nilai, maka diperlukan pernyataan berikut:

     Ptr_Nilai = Nilai;

Hal ini disebabkan karena nama array sebenarnya sudah menyatakan pointer. Oleh sebab itu operator & tidak diperlukan lagi.

/* Program Pointer dan Array*/

#include<iostream.h>
#include<conio.h>
#include<iostream.h>

main()
{
     int Nilai[]={45, 23, 50, 8, 12, 10, 15};
     int *Ptr_Nilai;
     int i;
     Ptr_Nilai = Nilai;
     cout<<"\nNilai Ptr_Nilai   : "<<Ptr_Nilai;
     cout<<"\nAlamat array Nilai     : "<<Ptr_Nilai;
     cout<<"\nNilai yang ada pada alamat "<<Ptr_Nilai<<"adalah <<*Ptr_Nilai;
     cout<<"\nElemen array indeks pertama : "<<Nilai[0];
     cout<<\n\nElemen Array (dgn Array) : ";
     for(i=0;i<7;i++)
           cout<<Nilai[i]<<" "; //mencetak elemen array
     cout<<"\n\nElemen Array (dgn pointer) : ";
     for(i=0;i<7;i++)
           cout<<*(Nilai+i)<<" "; //mencetak elemen array
     getch();
}

Dari program di atas terlihat bahwa cout<<Nilai[i] sama artinya dengan cout<<*(Nilai +i). Pernyataan cout<<*(Nilai+i) artinya adalah Nilai+(ukuran tipe elemen Nilai)*i.

Pointer Pada Pointer
Variabel pointer menunjuk alamat suatu variabel. Di samping itu suatu variabel pointer juga dapat menunjuk ke variabel pointer lainnya. Dalam hal ini dilakukan dengan cara menambahkan operator reference ( * ) pada variabel yang akan ditunjuk.

Contoh: misalkan kita mempunyai deklarasi seperti berikut ini.
                int Var_x;
                int *xPtr1;
                int **xPtr2;
Artinya:
  • Var_x adalah variabel bertipe int
  • *xPtr1 adalah variabel pointer yang menunjuk ke data bertipe int
  • **xPtr2 adalah variabel pointer yang menunjuk ke pointer int


Di atas telah kita lihat bahwa agar xPtr1 menunjuk ke variabel Var_x dapat dilakukan dengan perintah:
xPtr1 = &Var_x;

Supaya xPtr2 juga dapat menunjuk ke xPtr1 dapat dilakukan dngan perintah:
xPtr2 = &xPtr1;

Karena xPtr2 telah menunjuk atau berisi alamat xPtr1 dan xPtr1 menunjuk atau berisi alamat dari variabel Var_x, maka untuk mengakses nilai dari Var_x dapat dilakukan dengan perintah:
                cout<<Var_x;
     cout<<*xPtr1;
     cout<<**xPtr2;

/* Program Pointer pada Pointer */

#include<iostream.h>
#include<conio.h>

void main()
{
     int x=8;
     int *xPtr1;
     int **xPtr2;
     xPtr1 = &x;
     xPtr2 = &xPtr1
     cout<<"Nilai x = "<<x<<endl;
     cout<<"Nilai x = "<<*xPtr1<<endl;
     cout<<"Nilai x = "<<**XPtr2<<endl;
     getch();
}


Pointer Dalam Bahasa C++ Pointer Dalam Bahasa C++ Reviewed by M on 14:19:00 Rating: 5

1 comment:

Powered by Blogger.