MODUL VI
POINTER
6.1 TUJUAN PRAKTIKUM
Adapun tujuan dari praktikum ini adalah:
1. Mahasiswa dapat memahami definisi dan kegunaan pointer.
2. Mahasiswa dapat mengimplementasikan pointer dalam program.
6.2 DASAR TEORI
6.2.1 Pointer
Pointer adalah suatu variabel penunjuk berisi nilai yang menuju kalimat
suatu lokasi memori tertentu. Jadi pointer tidak berisi nilai data melainkan berisi
suatu alamat memori. Lokasi memori tersebut bisa diwakili sebuah variabel atau
juga alamat memori secara langsung.
1. Deklarasi pointer
Jika terdapat sebuah variabel dengan tipe data tertentu maka untuk mendpatkan
alamat dari variabel tersebut adalah dengan menggunakan operator “&”.
Alamat ini lah yang kemudian akan disimpan kedalam variabel yang bertipe
pointer. Untuk mendeklarasikan variabel sebagai pointer, hanya perlu
menambahkan tanda asterisk (*) di depan nama variabel. Bentuk umum dari
pendeklarasian pointer:
Tipe_data
nama_variabel Atau
Tipe_data* nama_variabel
Int main(){
Int a=5;
Int *b;
b=&a;
Cout<< “nilai variabel adalah :” <<a<<endl;
Cout<< “alamat variabel a adalah<<&a<<endl;
Cout<< “isi dari variabel b adalah <<b<<endl;
Cout<< “nilai yang tertampung pada variabel b: <<*b<<endl;
Return 0;
}
b. Reference (&)
Suatu operator yang berfungsi untuk menanyakan alamat dari suatu variabel.
Apabila anda memberikan symbol “&” pada awal variabel dan mencetak
hasilnya, maka yang akan tercetak adalah alamat dari variabel tersebut bukan
nilai yang ditampung oleh variabel tersebut. Bentuk contoh programnya
sebagai berikut [1]:
#include <iostream>
Using namespace std;
Int main(){
Int a=5;
Cout<< “alamat variabel a adalah :”<<&a<<endl;
Cout<< “nilai variabel a adalah” <<a<<endl;
Return 0;
}
b. Pointer
Pointer merupakan berisi alamat memori dari suatu variabel tertentu.
Membutuhkan operator khusus deperti operator deference atau reference
dan bersifat dinamis maka contoh dari deklarasi sebagai berikut:
Int *a;
4. Pemanfaatan pointer
a. “void” pointer
“void” pointer adalah pointer yang dapat menyimak ke semua tipe data,
yaitu dengan mendeklarasikan pointer sebagai pointer tanpa tipe data.
Bentuk umum untuk mendeklarasikan pointer tanpa tipe data adalah sebagai
berikut:
Void *nama_pointer;
#include <iostream>
#include <cstblib>
Using namespace std;
Int main(){
Void *p;
Int x;
Float y;
Cout<< “masukan nilai x :”; cin>>x;
Cout<< “masukan nilai y :”; cin>>y;
P=&x;
Cout<<endl;
Cout<< “nilai x=”<<*(int*)p<<endl;
Cout<< “alamat y=”<<*(int*)p<<endl;
P=&y;
Cout<< “nilai x=”<<*(float*)p<<endl;
Cout<< “nilai y=”<<*(float*)p<<endl;
Return EXIT_SUCCESS;
}
<<(petunjuk+1);
Cout<<endl;
Cout<<“nilai”<<*(petunjuk+2)<<“ada di alamat memori
<<(petunjuk+2);
Cout<<endl;
Getch();
}
void main(){
int i;
int nilai [5], *alamat;
alamat=nilai;
for(i=0;i<5;i++){
cout<<"Masukkan nilai "<<(i+1)<<" = ";
cin>>nilai[i];}
cout<<"\nHasil pengaksesan elemen array lewat pointer :
\n";
for(i=1;i<=5;i++){
cout<<"Elemen "<<i<<", Nilai"<<nilai[i];
cout<<", menempati alamat memori= ";
cout<<&nilai[i]<<endl;}
getch();}
struct mahasiswa {
char nama[20];
char nim[20];
};
Long x;
X=10;
Cout<< “nilai x”<<x<<endl;
Cout<< “nilai *x”<<*x<<endl;
Cout<< “nilai &x”<<&x<<endl;
Return 0;
}
b. Contoh 2
#include <iostream>
Int main(){
Int var=2;
Int *pvar=&var;
Cout<<size of (pvar)<<endl;
Return 0;
}
6.3 PERMASALAHAN
1. Buatlah program pengaturan penyimpanan berkas pada “Local Disk (D:)” serta
penjabar direktori berkas setiap berkas yang terdapat pada “Local Disk (D:)”.
Bermula dari program akan meminta pengguna untuk memasukkan bilangan N
untuk jumlah berkas yang terdapat pada “Local Disk (D:)”. Lalu program akan
meminta pengguna untuk memasukkan bilangan I untuk jumlah berkas yang
terdapat pada “Local Disk (D:)”. Selanjutnya program akan memasukkan nama
dari setiap berkas sesuai urutan dari berkas teratas (perhatikan ilustrasi di
samping) dengan hitungan dari terbesar hingga terkecil lalu akan masuk ke
dalam seperti pada keluaran di bawah.
Setiap menamai sebuah berkas, program akan meminta pengguna untuk
memasukkan bilangan K untuk jumlah berkas yang terdapat pada berkas yang
sedang dinamai. Namun, program akan terus-menerus meminta ulang
pengguna untuk memasukkan bilangan N, I, dan K jika memang tidak
memenuhi syarat batasan yang tertera dibawah.Program akan mengeluarkan
direktori setiap berkas, mulai dari berkas yang pertama dinamai sampai berkas
yang terakhir dinamai. Informasi berupa direktori berkas yang dihubungkan
dengan karakter “/” terus dilanjutkan sampai akhirnya menuju “Local Disk
(D:)” sebagai ujung direktori.
Formula :
Batasan :
( ) ∑
4. Source code
#include <iostream>
#include <stdio.h>
#include <string.h>
main(){
do{
cout << "Masukkan total folder : ";
cin >> n;
}while(n<1);
do{
cout << "Masukkan jumlah folder dalam Local Disk
(D:) : ";
cin >> i;
}while((i<1) || (i>n));
kuota=i;
while(i>0){
cout << "Nama folder ke - "<< (i) << " dalam
Local Disk (D:) : ";
gets(berkas[catat].nama);
berkas[catat].induk=&berkas[0];
catat++;
i--;
dalam(catat-1,1);
}
back :
for(int c=1; c<=n; c++){
cout << "\nDirektori folder " << berkas[c].nama
<< " : ";
catat=0;
for(jin = &berkas[c]; jin != &berkas[0]; jin =
jin -> induk){
if(jin == &berkas[c])continue;
strcpy(direktori[catat].nama, jin -> nama);
catat++;
}
cout << "D:/";
for(int x=(catat-1); x>=0; x--){
cout << direktori[x].nama << "/";
} cout << berkas[c].nama;
}
do{
cout << "\nMasukkan Aksi : \n \n1. Pindah Berkas
\n2. Ganti Nama Berkas \n3. Direktori Berkas \n0. Keluar\n
\nMasukkan Aksi: ";
cin >> kuota;
switch(kuota){
case 1 : move(); break;
case 2 : ganti(); break;
case 3 : goto back; break;
}
}while(kuota!=0);
}
5. Hasil Program
#include <iostream>
Script “stdio.h” merupakan salah satu header file yang berfungsi untuk
mengaktifkan perintah “gets”, yaitu untuk menerima masukan tipe data string
tanpa harus melakukan penentuan tipe data terlebih dahulu.
#include <string.h>
dan tab yang memiliki tipe data int. Script “int search(char nama[100]);”
merupakan potongan kode yang berfungsi mendeklarasikan array nama yang
memiliki tipe data char dengan batasan 100. Script “int move();”
Modul V I– Pointer VI- 15
Praktikum Algoritma dan Pemograman 2020
Script “do{ cout << "Masukkan total folder dalam Local Disk
(D:) : "; “ merupakan suatu aksi yang dilakukan jika kondisi “while” yang
disebutkan setelahnya terpenuhi, namun jika tidak terpenuhi setidaknya aksi ini
akan menjalankan satu aksi. Script “cin >> n;” berfungsi sebagai variabel yang
menyimpan nilai total folder. Script “}while(n<1);” berfungsi sebagai
pengulangan, dimana jika pengulangan ini terpenuhi yaitu “n” lebih kecil dari 1
maka program akan menjalankan suatu aksi yang telah disebutkan pada “do”.
do{
cout << "Masukkan jumlah folder dalam Local Disk (D:) : ";
cin >> i;
}while((i<1) || (i>n));
Script “do{ cout << "Masukkan jumlah folder dalam Local Disk
(D:) : "; “ merupakan suatu aksi yang dilakukan jika kondisi “while” yang
disebutkan setelahnya terpenuhi, namun jika tidak terpenuhi setidaknya aksi ini
akan menjalankan satu aksi. Script “cin >> i;” berfungsi sebagai variabel yang
menyimpan nilai jumlah folder. Script “}while((i<1) || (i>n));” berfungsi
sebagai pengulangan, dimana jika pengulangan ini terpenuhi yaitu i lebih kecil
dari 1 atau “i” lebih besar dari “n” maka program akan menjalankan suatu aksi
yang telah disebutkan pada “do”.
quota=i;
while(i>0){
cout << "Masukkan nama folder ke - "<< (i) << " dalam Local Disk
(D:) : ";
gets(berkas[catat].nama);
berkas[catat].induk=&berkas[0];
catat++;
i--;
dalam(catat-1,1);
sebagai pengulangan, dimana jin adalah alamat berkas dari “c”, “jin” tidak sama
dengan alamat berkas 0 dan “jin” menunjuk alamat induk. Script “if(jin ==
&berkas[c])continue;” merupakan penyeleksian kondisi dimana jika “jin”
sama dengan alamat berkas “c”, maka program akan diulangi. Script
“strcpy(direktori[catat].nama, jin -> nama);” berfungsi untuk
menyimpan direktori suatu “berkas”, dan nama pada “jin”. Script “catat++;”
berfungsi untuk menambah nilai “catat”.
Script “cout << "D:/";” berfungsi untuk menampilkan “D” pada layar.
Script “for(int x=(catat-1); x>=0; x--){“ merupakan perulangan dimana
“x” adalah “catat” dikurangi satu, “x” lebih besar sama dengan 0 dan “x” akan
dikurangi. Script “cout << direktori[x].nama << "/";” berfungsi untuk
menampilkan direktori berkas suatu berkas. Script “}cout <<
Script “do{“ berfungsi untuk menjalankan suatu aksi jika suatu kondisi
terpenuhi. Script “cout << "\nPilih Aksi: \n \n1. Pindah Berkas
\n2. Ganti Nama Berkas \n3. Direktori Berkas \n0. Keluar\n
\nMasukkan Aksi: ";” berfungsi untuk menampilkan pilihan pilih aksi, pindah
berkas, ganti nama, direktori berkas dan keluar pada layar. Script “cin >>
quota;” berfungsi untuk menyimpan nilai pilihan yang ditampilkan ke layar.
pendeklarasian fungsi yang didalamnya terdapat “ibu” dan “tab” yang bertipe
data int. Script “if(quota<n){“ berfungsi sebagai penyeleksi kondisi yaitu jika
“quota” lebih besar dari “n”.
Modul V I– Pointer VI- 18
Praktikum Algoritma dan Pemograman 2020
do{
repeat :
cout << "\tMasukkan jumlah folder dalam folder " <<
berkas[ibu].nama << " : ";
cin >> k;
if((k==0) && (catat==(quota+1))){
goto repeat;
}
}while((k<0) || (k>(n-quota)));
Script “do{“ berfungsi untuk menjalankan suatu aksi tertentu jika suatu
kondisi tertentu terpenuhi. Script “cout << "\tMasukkan jumlah folder
dalam folder " << berkas[ibu].nama << " : ";” berfungsi untuk
Script “quota += k;” berfungsi memberi nilai “quota” yang ditambah adalah
“k” . Script “while(k>0){“ berfungsi sebagai perulangan yaitu selama “k” lebih
besar dari 0. Script “for(int z=0; z<tab; z++)cout << "\t";” merupakan
perulangan dimana “z” sama dengan 0, “z” lebih kecil dari tab dan “z” akan
bertambah. Script “cout << "\tfolder ke - "<< (k) << " dalam folder
"<< berkas[ibu].nama << " : ";” berfungsi menampilkan nama folder ke
berfungsi memberi nilai “induk” pada berkas. Script “catat++;” berfungsi untuk
menambah nilai “catat”. Script “k--;” berfungsi untuk mengurangi nilai “k”.
int search(char nama[100]){
for(int q=1; q<=n; q++){
if(strcmp(nama, berkas[q].nama) == 0){
return q;
}
}return -1;
Script “int move(){“ merupakan variabel dengan tipe data int. Script
“do{“ merupakan potongan kode yang berfungsi untuk menjalankan suatu aksi
selama kondisi yang dimaksud terpenuhi. Script “cout << "Masukkan nama
berkas yang akan dipindahkan : "; ” berfungsi untuk menampilkan intruksi
kepada user untuk memasukkan nama berkas yang akan dipindahkan. Script
“gets(berkas[0].nama);” berfungsi untuk mengambil nilai pada variabel nama.
Script “}while(i==-1);” merupakan suatu perulangan yaitu selama i sama
dengan -1. Sedangkan script “berkas[catat].induk = &berkas[i];” berfungsi
memberikan nilai “induk” berkas dengan alamat berkas.
int change(){
do{
cout << "Masukkan nama berkas yang akan diganti namanya : ";
gets(berkas[0].nama);
catat = search(berkas[0].nama);
}while(catat==-1);
cout << "Masukkan nama baru berkas : ";
gets(berkas[0].nama);
strcpy(berkas[catat].nama, berkas[0].nama);
cout << "Nama berkas berhasil diganti\n";
}
Script “int change(){“ merupakan variabel change dengan tipe data int.
Script “do{“ berfungsi untuk menjalankan suatu aksi selama kondisi yang
disebutkan terpenuhi. Script “cout << "Masukkan nama berkas yang akan
diganti namanya : ";” berfungsi untuk menampilkan intruksi kepada user
untuk meng input kan nama berkas yang akan diganti namanya pada layar. Script
“gets(berkas[0].nama);” berfungsi untuk mengambil nilai pada variabel
“nama”. Script “catat = search(berkas[0].nama);” berfungsi untuk variabel
catat mencari nama pada berkas. Script “}while(catat==-1);” merupakan suatu
perulangan yaitu selama nilai “catat” sama dengan -1, maka program akan
menjalankan “cout << "Masukkan nama baru berkas : ";” berfungsi
memberi intruksi pada user agar memasukkan nama nama baru pada berkas.
Script “cout << "Nama berkas berhasil diganti\n";” berfungsi untuk
mnampilkan nama berkas yang telah diganti oleh user.
6.6 KESIMPULAN
Berdasarkan praktikum yang telah dilaksanaka, maka dapat kita ambil
beberapa kesimpulan :
1. Pointer merupakan variabel penunjuk alamat suatu lokasi memori tertentu,
pointer berfungsi untuk menyalin dan mengurus sebuah alamat dari variabel
yang dituju.
2. Beberapa pemanfaatan pointer dalam program antara lain void pointer, pointer
pada array, pointer pada struct, pointer pada string, dan pointer pada pointer.
Pointer digunakan untuk menunjuk nilai alamat memori pada suatu variabel
dan diakses menggunakan Pointer deference (&) untuk menunjuk alamat
memori variabel tersebut.
DAFTAR PUSTAKA