Pointer (Pada C++)



Pointer adalah sebuah tipe data yang mencatat alamat sebuah memori, atau bisa disebut juga sebagai penunjuk/pencatat alamat memori.

  • Deklarasi suatu pointer menggunakan notasi* dibelakang tipe.

                tipe* namaPointer;
                contoh : int* p;
operasi awalan& didepan suatu variabel digunakan untuk mengambil alamat dari suatu variabel.

int* p;
p = &x   //artinya pointer mencatat alamat x.
main(){
            int n=33;
            cout<<"n = "<<n<<endl;                    \\ isi dari n
            cout<<"&n = "<<&n<<endl;              \\ alamat dari n
}



  • Referensi

Referensi atau Alias adalah suatu sinonim untuk variabel lain. Pendeklarasian referensi yaitu dengan menggunakan operator & dibelakang suatu tipe (data).
                tipe& alias = var;
contoh : int& m=n;
main(){
            int n=3;
            int& r=n;
            cout<<"n = "<<n<<" ,r = "<<r<<endl; //n=3 r=3
            --n;                                                                                           //n=n-1
            cout<<"n = "<<n<<" ,r = "<<r<<endl;           //n=2 r=2
            r*=2;                                                                                        //r=r*2 = 4
            cout<<"n = "<<n<<" ,r = "<<r<<endl;           //n=4 r=4
            cout<<"&n = "<<&n<<" ,&r = "<<&r<<endl;           //alamat dari n, alamat dari r, alamat dari n=r
}

Analisis hasilnya

Gambar 1. Hasil ke-1
  • Pointer To Integer
Alamat dari suatu variabel bertipe integer bisa dicatat oleh suatu pointer.

Gambar 2. Pointer To Integer
Gambar diatas menunjukan bahwa sebuah lokasi dengan nama n yang isinya bernilai 5 dengan tipe integer dicatat alamatnya oleh sebuah pointer p. Pointer p sendiri menempati lokasi memori dengan alamat F005h dengan isi yang dicatatnya adalah F001h (alamat dari n).
Pedeklarasian keadaan pointer diatas adalah sebagai berikut :
main(){
            int n=5;
            int* p= &n;
            cout<<"n = "<<n<<",&n = "<<&n<<endl;                 //5, F001h
            cout<<"p = "<<p<<",&p = "<<&p<<endl;                //F001h, F005h
}

Untuk mengakses nilai dari variabel yang ditunjuk oleh integer dengan menggunakan operator * (bintang asterik) didepan variabel pointer.
Contoh nilai variabel yang ditunjuk pointer
main(){
            int n=5;
            int* p= &n;
            cout<<"*p = "<<*p<<endl;    //5       
}

Contoh nilai referensi dari variabel yang ditunjuk pointer
main(){
            int n=5;
            int* p= &n;
            int& r= *p;
            cout<<"r = "<<r<<endl;                      //5
}

  • Operator New
Ketika pointer sudah dideklarasikan seperti berikut :
                float* p;
maka pernyataan diatas hanya mengalokasikan memori untuk pointer itu sendiri. Nilai dari pointer nantinya berupa alamat memori, tetapi memori pada alamat yang akan dicatat oleh suatu pointer belum dialokasikan.
Perhatikan deklarasi kasus dibawah ini, p belum diimisalisasikan (belum mengalokasikan memori). Usaha untuk mengakses p mungkin akan mengalami error.
*p=3.1415           //ERROR : karena tidak ada alokasi memori untuk *p.
Jalan terbaik mencegah masalah ini adalah menginisialisasikan pointer ketika dideklarasikan :
Cara 1 (mencatat lokasi yang sudah ada nama dan pemiliknya)
                float x =3.1415;                 //x berisi nilai 3.1415
                float* p = &x;                     // p berisi alamat dari x
                cout<<”p = “<<*p<<endl;
dalam kasus ini, mengakses *p tidak akan bermasalah karena memori yang digunakan untuk menyimpan float 3.1415 sudah otomatis dialokasikan ketika x dideklarasikan. p menunjuk pada alokasi memori yang sama.
Cara 2 (mencatat lokasi yang dialokasikan sesuai kebutuhan atau ketika diperlukan)
                a). float* p;
                b). p = new float; // alokasi memori untuk 1 data float yang langsung dicatat oleh p
                c). *p = 3.1415
Operator new mengembalikan alamat dari blok memori yang belum digunakan yang besarnya float (4 byte). Ini menjamin bahwa *p tidak digunakan oleh variabel lain.

Gambar 3 operasi new
  • Operasi Pointer
Operasi yang umum dilakukan terhadap pointer adalah operasi Assignment. Misalkan ada 2 pointer p dan q, lalu dilakukan operasi assignment sebagai berikut
                p=q;
Artinya p akan mencatat alamat yang sama dengan dicatat oleh q;
Gambaran keadaan pointer adalah sebagai berikut :

Gambar 4. Operasi Pointer p=q

  • Dealokasi
Jika suatu tempat yang dicatat oleh suatu pointer ingin dibebaskan maka harusalah dilakukan proses dealokasi dengan tujuan lokasi tersebut bisa ditempati oleh data jenis lain. Perintah yang digunakan adalah :
                delete(p)
terlihat bahwa dengan bentuk pengelolaan seperti ini maka dilakukan pengelolaan memori secara dinamis yang artinya tidak perlu mengalokasikan memori lebih awal terlebih dahulu secara tetap (fixed). Jika diperlukan maka bisa dilakukan alokasi dan jika sudah tidak diperlukan maka lokasi memori tersebut bisa dilakukan dealokasi.

  • Pointer to Record
Pointer juga bisa digunakan untuk mencatat alamat dari suatu record/structure.
Caranya :
Buat tipe nama record/structure
Buat nama alias tipe pointer yang menunjukan ke tipe nama record
Deklarasikan variabel – variabel yang mengacu pada alias tipe pointer tersebut.

Gambar 5. Pointer to Record
Cara mendeklarasikan pointer to record di atas adalah :
struct mahasiswa
{
            char NPM[8];
            char nama[20];
            int nilai;
};

typedef mahasiswa* pointer;  //pointer menujuk addres record mahasiswa.

main(){
            pointer p,q;                              //p,q : pointer to record/

            p= new mahasiswa;                //alokasi melalui p.
            cin>>p->NPM;
            cin>>p->nama;
            cin>>p->nilai;

            q= new mahasiswa;                //alokasi melalui q.
            cin>>q->NPM;
            cin>>q->nama;
            cin>>q->nilai;

            cout<<p->NPM<<p->nama<<p->nilai<<endl;
            cout<<q->NPM<<q->nama<<q->nilai<<endl;
}

Pengaksesan atribut suatu record melalui suatu pointer menggunakan operator”->”.
Contoh : p->NPM;
Operasi Assignment pada pointer to record juga sama seperti pada pointer to integer.

pencarian terkait
#pointer #operasi_new #pointer_to_integer #pointer_to_record

Posting Komentar untuk "Pointer (Pada C++)"