Algoritma dan Pemrograman 2 POINTER Pointer : variable yang berisi alamat memori dari suatu variable yang berisi suatu nilai tertentu. pusia merupakan variabel pointer (pointer) yang menunjuk ke variabel Usia. Isi dari pusia (FFAB0000) merupakan alamat dari variabel Usia. Variabel usia berisi nilai 37. 1. Deklarasi variabel pointer Bentuk deklarasi variabel pointer : tipe_data* namavariabel contoh : int* pnilai; Agar pointer menunjuk ke suatu variabel maka perlu diisi dengan alamat dari variabel yang bersangkutan. Contoh : int Usia; int * pusia; pusia = &Usia; tanda * menunjukkan bahwa variabel dideklarasikan sebagai pointer. pusia menunjuk ke sebuah obyek(usia) yang memiliki tipe integer. & : operator alamat, merupakan operator unary yang mengembalikan alamat dari operand.
Algoritma dan Pemrograman 3 int A=25,*pA; pa=&a; cout<<"a = "<<A<<endl; cout<<"pa = "<<pa<<endl; cout<<"&a = "<<&A<<endl; cout<<"&pa = "<<&pa<<endl; cout<<"*pa = "<<*pa<<endl; *pa=100; cout<<"*pa = "<<*pa<<endl; Hasilnya : A = 25 pa = 0x0012FF7C &A = 0x0012FF7C &pa = 0x0012FF78 *pa = 25 *pa = 100 2. Pointer dan array 1D Pointer dapat digunakan untuk menunjuk ke array dan selanjutnya pointer dapat dipakai untuk mengakses elemen-elemen array. Contoh : int *ptgl, tgllahir[]=24,6,65; ptgl = &tgllahir; atau ptgl = tgllahir; atau ptgl = &ptgl[0]; ptgl = &tgllahir[2]; berarti ptgl menunjuk ke elemen tgllahir dengan subskript/indek 2
Algoritma dan Pemrograman 4 int *ptgl, *ptgl2,tgllahir[]=24,6,65; ptgl=tgllahir;ptgl2=&tgllahir[1]; //Menampilkan isi array dengan pointer for(int i=1;i<=3;i++) cout<<*ptgl<<endl; ptgl++; cout<<*ptgl2<<endl; cout<<*(ptgl2+1)<<endl; Hasilnya : (1) (2) (3) (4) int *P; int A[5]=2,1,7,0,5; P=A; cout<<*p<<endl;p++; cout<<*p<<endl; int *P; int A[5]=2,1,7,0,5; P=A; cout<<*p++<<endl; cout<<*p<<endl; 24 6 65 6 65 int *P; int A[5]=2,1,7,0,5; P=A; cout<<*++p<<endl; cout<<*p<<endl; int *P; int A[5]=2,1,7,0,5; P=A; cout<<++*p<<endl; cout<<*p<<endl;
Algoritma dan Pemrograman 5 Penjelasan (1) : Pernyataan P=A menyebabkan pointer P menunjuk ke elemen A[0], sehingga pernyataan cout<<*p<<endl mencetak angka 2. Pernyataan P++ menyebabkan pointer P maju 1 langkah menunjuk ke elemen A[1]. Pernyataan cout<<*p<<endl mencetak isi elemen yang sedang ditunjuk oleh P, sehingga tercetak angka 1. Penjelasan (2) : Pernyataan cout<<*p++<<endl mencetak isi elemen yang sedang ditunjuk oleh P, sehingga tercetak angka 2, setelah itu pointer maju satu langkah menunjuk ke A[1] Pernyataan cout<<*p<<endl mencetak isi elemen yang sedang ditunjuk oleh P, sehingga tercetak angka 1. Penjelasan (3) : Pernyataan cout<<*++p<<endl menyebabkan pointer maju satu langkah ke A[1] kemudian mencetak isi array yg sedang ditunjukknya yaitu angka 1. Pernyataan cout<<*p<<endl mencetak isi elemen yang sedang ditunjuk oleh P, sehingga tercetak angka 1 Penjelasan (4) : Elemen yang sedang ditunjuk oleh P adalah A[0] yang isinya 2. Pernyataan cout<<++*p<<endl akan menambah isi elemen A[0] dengan 1 sehingga isinya menjadi 3, kemudian mencetak isi elemennya yaitu angka 3. Pernyataan cout<<*p<<endl mencetak isi elemen yang sedang ditunjuk oleh P, sehingga tercetak angka 3 Posisi awal pointer P : Tentukan posisi P dan isi elemen untuk contoh (2), (3), (4).
Algoritma dan Pemrograman 6 3. Pointer dan array 2D char A[3][5]= 'A','B','C','D','E', 'F','G','H','I','J', 'K','L','M','N','O'; char *P; P=&A[0][0]; cout<<*p<<endl; Dengan perintah char A[3][5] terbentuk array 2D sbb: 0 1 2 3 4 0 A B C D E 1 F G H I J 2 K L M N O Dalam memori komputer akan tersusun sbb : 0,0 0,1 0,2 0,3 0,4 1,0 1,1 1,2 1,3 1,4 2,0 2,1 2,2 2,3 2,4 A B C D E F G H I J K L M N O baris-0 baris-1 baris-2 0,0 artinya A[0][0] Pernyataan P=&A[0][0], menyebabkan pointer menunjuk ke array elemen pertama : 0,0 0,1 0,2 0,3 0,4 1,0 1,1 1,2 1,3 1,4 2,0 2,1 2,2 2,3 2,4 A B C D E F G H I J K L M N O P Instruksi P=&A[0][0], dapat juga ditulis dalam bentuk P=A[0] Array 2D 3 x 5 dianggap sebagai kumpulan array 1D, A[0],A[1], dan A[2], masing-masing 5 elemen. Dengan pernyataan P=A[1] pointer P akan menunjuk ke baris kedua yaitu A[1][0] Pernyataan cout<<*p akan mencetak isi elemen yang ditunjuk oleh pointer P yaitu A[0][0].
Algoritma dan Pemrograman 7 #include<iomanip.h> char A[3][5]= 'A','B','C','D','E', 'F','G','H','I','J', 'K','L','M','N','O'; char *P; P=A[0]; for(int i=0;i<=14;i++) cout<<setw(2)<<*p++; cout<<endl; Outputnya : A B C D E F G H I J K L M N O #include<iomanip.h> char A[3][5]= 'A','B','C','D','E', 'F','G','H','I','J', 'K','L','M','N','O'; char *P; for(int i=0;i<=2;i++) P=A[i]; for(int j=0;j<=4;j++) cout<<setw(2)<<*p++; cout<<endl; Outputnya : A B C D E F G H I J K L M N O
Algoritma dan Pemrograman 8 4. Pointer dan String #include<iomanip.h> char kalimat[]="selamat Belajar Visual C++"; char *pkarakter; int JumlahHurupKecil=0; int JumlahHurupBesar=0; pkarakter=kalimat; while(*pkarakter) char kar=*pkarakter; if(kar>='a' && kar<='z') JumlahHurupKecil++; if(kar>='a' && kar<='z') JumlahHurupBesar++; pkarakter++; cout<<"jumlah Hurup Kecil = "<<JumlahHurupKecil<<endl; cout<<"jumlah Hurup Kapital = "<<JumlahHurupBesar<<endl; Outputnya : Jumlah Hurup Kecil = 17 Jumlah Hurup Kapital = 4
Algoritma dan Pemrograman 9 5. Array dari pointer Array dapat berisi pointer. Deklarasinya dapat dilakukan : char *Baju[4]= Renang, Sekolah, Kerja, Pesta ; Baju[4] menunjukkan deklarasi sebuah array yang terdiri dari 4 elemen. Bagian char * menunjukkan bahwa tiap-tiap elemen dari array Baju berupa pointer terhadap char. #include<stdio.h> #define JML_MHS 10 //Banyaknya Mahasiswa #define JML_MK 5 //Jumlah mata Kuliah int i,k; int *pnilaimhs[jml_mhs],nilai[jml_mhs][jml_mk]; FILE *pf; for(i=0;i<=jml_mhs-1;i++) pnilaimhs[i]=nilai[i]; if((pf=fopen("d:\\kampus\\program\\c++\\array3\\data.txt","r"))==null)
Algoritma dan Pemrograman 10 printf("file tidak dapat dibuka\n"); else for(i=0;i<jml_mhs;i++) for(k=0;k<jml_mk;k++) fscanf(pf,"%d",&nilai[i][k]); for(i=0;i<jml_mhs;i++) for(k=0;k<jml_mk;k++) printf("%d ",*pnilaimhs[i]++); printf("\n"); fclose(pf);
Algoritma dan Pemrograman 11 Data yang tersimpan dalam file data.txt : 00 10 20 30 40 01 11 21 31 41 02 12 22 32 42 03 13 23 33 43 04 14 24 34 44 05 15 25 35 45 06 16 26 36 46 07 17 27 37 47 08 18 28 38 48 09 19 29 39 49 Hasilnya : 00 10 20 30 40 01 11 21 31 41 02 12 22 32 42 03 13 23 33 43 04 14 24 34 44 05 15 25 35 45 06 16 26 36 46 07 17 27 37 47 08 18 28 38 48 09 19 29 39 49 6. Pointer menunjuk ke pointer Untuk membentuk hubungan seperti disamping diperlukan pendeklarasian : int *pb; int **pa; int nilaix; pa adalah pointer yang menunjuk ke tipe pointer pb adalah pointer yang menunjuk ke tipe int nilaix adalah variabel bertipe int Agar pointer pb menunjuk ke variabel nilaix : pb=&nilaix Agar pa menunjuk ke pointer pb : pa=&pb
Algoritma dan Pemrograman 12 int *pb; int **pa; int nilaix=100; pb=&nilaix; pa=&pb; cout<< Isi nilaix via pb = <<*pb<<endl; cout<< Isi nilaix via pa = <<**pa<<endl; Hasilnya : Isi nilaix via pb = 100 Isi nilaix via pa = 100 7. Pengalokasian memori secara dinamis Dengan menggunakan pointer dapat dilakukan pengalokasian memori secara dinamis, yaitu pointer menunjuk ke lokasi memori yang diciptakan ketika program sedang berjalan. Memori yang dialokasikan dapat dihapus kembali (dealokasi memori) kalau sudah diperlukan lagi. Lokasi memori tersebut dikenal dengan nama heap. Operator yang digunakan untuk alokasi memori : new Operator yang digunakan untuk dealokasi memori : delete Contoh : int *pint; pint= new int;
Algoritma dan Pemrograman 13 Setelah int *pint dieksekusi Setelah pint=new int dieksekusi #include<iomanip.h> const int KOLOM=2;int(*pDuaDim)[KOLOM]; pduadim=new int[3][kolom]; pduadim[0][0]=10; pduadim[0][1]=20; pduadim[1][0]=30; pduadim[1][1]=40; pduadim[2][0]=50; pduadim[2][1]=60; for(int i=0;i<=2;i++) for(int j=0;j<=kolom-1;j++) cout<<setw(3)<<pduadim[i][j]; cout<<endl; delete []pduadim; Hasilnya : 10 20 30 40 50 60 int(*pduadim)[kolom] digunakan untuk mendeklarasikan pointer yang menunjuk ke array berdimensi dua. pduadim=new int[3][kolom] digunakan untuk mengalokasikan array berdimensi dua, yang mengandung 3 buah baris dan 2 kolom.
Algoritma dan Pemrograman 14 8. Referensi Referensi merupakan jenis pointer khusus yang memungkinkan suatu pointer diperlakukan seperti variabel biasa. Referensi digunakan untuk memberikan nama alias suatu variabel : Contoh : int &ref=namavariabel; int nilaix=100; int &refx=nilaix; cout<<"nilaix = "<<refx<<endl; refx=200; cout<<"nilaix = "<<refx<<endl; refx++; cout<<"nilaix = "<<refx<<endl; Hasilnya: nilaix=100 nilaix=200 nilaix=201
Algoritma dan Pemrograman 15 Soal : (Gunakan pointer untuk mengakses array) 1. Buatlah program untuk menghitung dan mencetak nilai rata-rata, nilai tertinggi, dan nilai terendah dari sekelompok bilangan bulat positip (integer). Jumlah data tidak diketahui, dimasukan melalui keyboard. 2. Buatlah program untuk menghitung dan mencetak IP seorang mahasiswa dengan rincian sbb : No Mata Kuliah Nilai SKS 1 Kalkulus 4 2 Fisika Dasar 3 3 PTI 2 4 Sistim Digital 2 5 PSO 2 6 Logika Matematika 2 7 Bahasa Inggris 2 8 Agama 2 Bobot Nilai : A = 4 B = 3 C = 2 D = 1 E = 0