Pertemuan 21 POINTER Bag.1 Dasar Pemrograman Renni Angreni, S.Kom.
MEMORY Memory merupakan ruang penyimpanan informasi di dalam komputer. Memory dalam komputer dibagi ke dalam satuan-satuan kecil yang disebut Byte. Masing-masing byte pada memory memiliki alamat tersendiri. Komputer mengakses (baca atau tulis) memory dengan menggunakan alamat tersebut.
POINTER Pointer seperti variabel, menyimpan suatu nilai. Hanya saja nilai yang disimpan di dalam pointer adalah berupa alamat memori. Pointer sesungguhnya berisi alamat dari suatu data, bukan data sebagaimana pada variabel. Untuk melihat alamat memori suatu variabel, kita dapat menggunakan operator referensi, yaitu : “ & “ Misalkan pernyataan : po = &var; Menugaskan nilai alamat dari variabel var ke dalam variabel po.
Contoh #include <iostream> #include <conio.h> #include <string> using namespace std; void main() { int angka = 34500; float bilangan = 98.21; string kabar = "Hello World!"; cout<<"Isi dari variabel"<<endl; cout<<"Variabel angka = "<<angka<<endl; cout<<"Variabel bilangan = "<<bilangan<<endl; cout<<"Variabel kabar = "<<kabar<<endl<<endl; cout<<"Alamat dari variabel"<<endl; cout<<"Alamat variabel angka = "<<&angka<<endl; cout<<"Alamat variabel bilangan = "<<&bilangan<<endl; cout<<"Alamat variabel kabar = "<<&kabar<<endl; _getch(); }
DEKLARASI POINTER Suatu variabel pointer dideklarasikan sebagai berikut : tipeData* namaVariabel; atau tipeData *namaVariabel; Tipe data dapat berupa sembarang tipe data seperti halnya pada pendefinisian variabel, dan nama variabel adalah nama variabel pointer. Contoh : int *a; float *b, *c; // bukan float *b, c; int* nilai;
Agar pointer menunjuk ke variabel lain, mula-mula harus diisi dengan alamat dari variabel yang hendak ditunjuk. Contoh : int nilai; //deklarasi variabel biasa int *pNilai; //deklarasi variabel pointer Pointer pNilai diatur agar menunjuk ke variabel nilai dengan cara : pNilai = &nilai; Untuk mengakses nilai yang berada pada alamat yang ditunjuk oleh pointer (jadi variabel pointer = variabel), kita menggunakan operator " * “ pada variabel pointer.
int nilai; int *pNilai; nilai = 35; pNilai = &nilai; cout<<nilai<<endl; cout<<pNilai<<endl; cout<<*pNilai<<endl; Setelah pernyataan pNilai = &nilai, maka variabel nilai dengan *pNilai menjadi sama. (tidak bisa langsung penugasan variabel ke variabel pointer pNilai = nilai; )
Perlu diingat bahwa operator “. “ pada pernyataan int Perlu diingat bahwa operator “ * “ pada pernyataan int *pNilai; tidak sama dengan operator “ * “ pada pernyataan cout<<*pNilai<<endl; Yang pertama adalah deklarasi variabel pointer bernama pNilai. Tanda “ * “ tersebut hanya menyatakan bahwa pNilai adalah suatu pointer. Sedangkan yang kedua tanda “ * “ adalah operator dereferensi yang menunjuk ke nilai dari variabel yang alamatnya tersimpan oleh pointer pNilai. Penggunaan tanda “ * “ pada saat deklarasi pointer dengan di dalam pernyataan harus dibedakan.
#include <iostream> #include <conio.h> using namespace std; void main() { int angka = 2011; int bilangan; int *add; int tes; bilangan = angka; add = &angka; tes = *add; cout<<"Variabel angka = "<<angka<<endl; cout<<"Variabel bilangan = "<<bilangan<<endl; cout<<"Pointer add = "<<add<<endl; cout<<"Variabel tes = "<<tes<<endl; cout<<"Alamat variabel tes = "<<&tes; _getch(); }
INISIALISASI POINTER Suatu pointer dapat langsung diisi nilai saat pendeklarasian. Caranya : int angka; int *add = &angka; Pernyataan ini ekivalen dengan : int *add; add = &angka; Dan BERBEDA dengan : int *add; *add = &angka;
POINTER & ARRAY Pointer dan array mempunyai hubungan yang dekat. Secara internal, array juga menyatakan alamat. Misalkan terdapat suatu array dan suatu pointer : int angka[5]; int *pArray; Maka agar pointer pArray menunjuk ke array angka, pernyataan yang valid adalah : pArray = angka; Sebaliknya, pernyataan pArray = &angka; menjadi tidak valid karena nama array sebenarnya sudah menyatakan alamat. Oleh karena itu tanda & tidak diperlukan lagi.
Meskipun pernyataan pArray = angka; boleh dilakukan, tetapi perintah / pernyataan angka = pArray; tidaklah valid. Hal ini karena tidak seperti alamat pada pointer pArray, alamat pada array angka tidak dapat diubah. Suatu array dapat dipandang sebagai konstanta pointer.
Setelah baris pArray = angka; maka : Identifier angka[0] sama dengan *pArray Identifier angka[1] sama dengan *(pArray+1) Identifier angka[2] sama dengan *(pArray+2) Array pointer juga dapat digeser. Misalkan mula-mula pArray menunjuk pada angka[0], maka : int angka[5] = {1,2,3,4,5}; int *pArray = angka; cout<<*pArray<<endl; pArray++; cout<<*pArray<<endl; pArray+=2; cout<<*pArray<<endl; pArray=&angka[2]; cout<<*pArray<<endl;
#include <iostream> #include <conio.h> Array isi angka[0] 1 angka[1] 2 angka[2] 3 angka[3] 4 angka[4] 5 #include <iostream> #include <conio.h> using namespace std; void main() { int angka[5] = {1,2,3,4,5}; int *pArray = angka; pArray = angka; cout<<angka<<endl; cout<<pArray<<endl; cout<<*pArray<<endl; pArray++; cout<<*pArray<<endl; pArray+=2; cout<<*pArray<<endl; pArray=&angka[2]; cout<<*pArray<<endl; _getch(); }
LATIHAN Terka output dari potongan program berikut : void main () { int abc = 5, def = 15; int *p1, *p2; p1 = &abc; p2 = &def; *p1 = 10; *p2 = *p1; p1 = p2; *p1 = 20; cout<<"isi abc : "<<abc<<endl; cout<<"isi def : "<<def; _getch(); }
dengan menggunakan pointer. Buatlah sebuah program C++ untuk menampilkan alamat dan yang ditunjuk dari variabel-variabel di bawah ini : int harga = 35000; double diskon = 3.50; float desimal = 24.57897; Buatlah sebuah program C++ untuk menampilkan seluruh elemen dari array : int bilangan[10] = {10,20,30,40,50,60,70,80,90,100}; dengan menggunakan pointer.
-- Sekian -- Dasar Pemrograman Renni Angreni, S.Kom.