MODUL V
POINTER
5.1 Tujuan
1. Mahasiswa dapat memahami definisi dan kegunaan pointer.
2. Mahasiswa dapat mengetahui bagaimana mengimplentasikan pointer dalam
program.
Setiap kali komputer menyimpan data, maka sistem operasi akan mengorganisasikan
lokasi pada memori pada alamat yang unik. Misal untuk alamat memori 1776, hanya
sebuah lokasi yang memiliki alamat tersebut.Dan alamat 1776 pasti terletak antara
1775 dan 1777.Nilai dari alamat inilah yang di tampilkan oleh pointer.
Tipe data pointer mendefinisikan tipe dari obyek yang ditunjuk oleh
pointer.Secara teknis, tipe apapun dari pointer dapat menunjukkan lokasi
(dimanapun) dalam memori.Bahkan operasi pointer dapat dilaksanakan relatif
terhadap tipe dasar apapun yang ditunjuk. Contoh, ketika kita mendeklarasikan
pointer dengan tipe int*,compilerakan menganggap alamat yang ditunjuk
menyimpan nilai integer - walaupun sebenarnya bukan (sebuah pointer int*
selalu menganggap bahwa ia menunjuk ke sebuah obyek bertipe integer, tidak
peduli isi sebenarnya). Karenanya, sebelum mendeklarasikan sebuah pointer,
pastikan tipenya sesuai dengan tipe obyek yang akan ditunjuk.
5.2.4 Operator yang digunakan pada pointer
Pada pointerterdapat beberapa operator yang dapat di gunakan yakni :
Operator alamat yang dilambangkan dengan symbol “&” adalah
merupakan operator yang mengembalikan alamat dari operandnya. Di mana
operator ini menunjukan alamat dari suatu variable .
x = 7;
y = &x; // operator alamat
y = 0x6a2F242c // alamat variable x
#include <iostream.h>
void main(){
intx[5]={10,20,30,40,50};
int *p;
p=x;
for(int i=0; i<5; i++){
cout<<"elemen array : "<<i<<"
"<<*(P+i)<<endl;
}
}
o Pointeraritmatika
Pointer dapat berperan sebagai operand untuk operasi aritmatika , situasi
ini lebih sering di kenal dengan nama pointer aritmatika. Jika kita mempunyai
variable A yang bertipe array yang berisi lima elemen dari tipe integer maka
untuk mengakses elemen array tersebut kita juga dapat gunakan pointer.
#include <stdio.h>
#include <string.h>
#include <iostream.h>
#include <malloc.h>
void main() {
int *X;
X = (int *) malloc(sizeof(int));
if (X == NULL){
cout<<"Memori Tidak Cukup!!!";
} else {
cout<<"Variable X+0 menunjuk pada alamat = ";
printf("%p",X);cout<<endl;
cout<<"Variable X+1 menunjuk pada alamat = ";
printf("%p",X+1);cout<<endl;
cout<<"Variable X+2 menunjuk pada alamat = ";
printf("%p",X+2);cout<<endl;
cout<<"Variable X+3 menunjuk pada alamat = ";
printf("%p",X+3);cout<<endl;
cout<<"Variable X+4 menunjuk pada alamat = ";
printf("%p",X+4);cout<<endl;
}
}
void main(){
char *P;
P="ZAF";
for(int i=0; i<3; i++){
cout<<"Nilai variable (P+"<<i<<") =
'"<<*(P+i)<<"' berada pada alamat = ";printf("%p",(P+i));
cout<<endl;
}
cout<<endl;
for (int j=0; j<3; j++){
cout<<"Nilai variable P["<<j<<"] = '"<<P[j]<<"'
berada pada alamat = ";printf("%p", &P[j]);
cout<<endl;
}
getch();
}
struct mahasiswa{
char nim[10];
char nama[40];
float IP;
}
mhs, *P = &mhs;
void main(){
int i,jum;
cout<<"Masukkan jumlah mahasiswa: ";cin>>jum;
cout<<endl;
for(i=0;i<=jum-1;i++){
cout<<"NIM : ";cin>>(P+i)->nim;
cout<<"NAMA : ";gets((P+i)->nama);
cout<<"IP : ";cin>>(P+i)->IP;
cout<<endl;
}
cout<<"Hasil:"<<endl<<endl;
for(i=0;i<=jum-1;i++){
cout<<"NIM : "<<(P+i)->nim<<endl;
cout<<"NAMA : "<<(P+i)->nama<<endl;
cout<<"IP : "<<(P+i)->IP<<endl;
cout<<endl;
}
getch();
}
o Penghapusanpointer
Dimana saat setelah memory kita alokasikan untuk keperluan tertentu sudah
tidak di gunakan lagi, maka sebaiknya kita mendealokasikan memory tersebut. Hal ini
di maksud untuk menghindarkan terjadinya pemborosan memory untukproses
penghapusan ini dalam program
Sintaksnya adalah :
delete nama_pointer
o PointerVoid
Pointervoid adalah pointer yang dapat menunjuk ke sebarang tipe data.
Misalnya, kita dapat mengatur agar pointer ini dapat menunjuk ke tipe data int,
tetapi disaat lain diperlukan untuk menunjuk data bertipe float.
Contoh :
#include <iostream.h>
#include <conio.h>
void main(){
clrscr();
void *ptr;
int vint=50;
float vfl=51.5;
ptr = &vint;
cout<<"Nilai yg ditunjuk oleh ptr : ";
cout<<*(int *)ptr<<endl;
ptr = &vfl;
cout<<"Nilai yg ditunjuk oleh ptr : ";
cout<<*(float *)ptr<<endl;
getch();
}
5.3 Jobsheet
No Latihan Script Program Kesimpulan
C C ++
3 Menginputkan data #include <stdio.h> #include <iostream> Pada tipe data kedua
int main() using namespace std;
dinamis yang berisi NIM { int main() pemprograman menggunakan
int *x,y; {
pada printf("Isi dari variabel y string *x,y; int dan tanda
= "); cout<<"NIM Anda =
sebuahpointerdanmena scanf("%d",&y); "; (*) untuk mendeklarasikan
x=&y; cin>>y;
mpilkannilaidanalamat printf("Alamat dari variabel x=&y; variabel pointer. Kemudian tanda
yang y = %p\n",&y); cout<<"Alamat dari
(&) di parameter menunjukkan
printf("Alamat yang ditunjuk NIM Anda Adalah:
ditunjukpointertersebut. pointer x = %p\n",x); "<<&y<<endl; alamat variabel.Nilai yang diterima
printf("Nilai yang ditunjuk cout<<"Nilai Yang
pointer x = %d",*x); Ditunjuk NIM Anda Adalah diteima oleh variabel lain dengan
} "<<*x<<endl;
} inputan yang berbeda
5 Membuatpointer yang #include <stdio.h> #include <iostream> Didalam pemrograman ini kita
int main() using namespace std;
dapatmenampungpointe { int main() menggunakan pointer didalam
rlain yang int nilai = 25; { pointer artinya dimana pointer
int *kelompok; int nilai = 27;
berisinilaistatisberupano int **grup; int *kelompok; pertama menunjuk variabel biasa
kelompok = &nilai; int **grup;
morkelompok. yaitu angka seperti pemrograman
grup = &kelompok; kelompok = &nilai;
printf("%d",**grup); grup = &kelompok; disamping terus pointer bintang
return 0; cout<<**grup;
} return 0; kedua menunjuk ke bintang
} pertama.
6 Menggunakanpointer #include <stdio.h> #include <iostream> Disinikita menggunakan pointerdi
int main() using namespace std;
untukmenentukanbilang { int main() dalam operator logika berfungsi
angenapatauganjil, int a,*y; { sebagai penunjuk alamat nilai di
printf("Masukkan 2 int a,*y;
bilanganmerupakannilai Angka Terakhir NIM anda "); cout<<"Masukkan 2 dalam perintah operator logika.
}
7 Membuat array yang #include <stdio.h> #include <iostream> Dalam pemprograman ini pointer
#include <conio.h> #include <conio.h>
berisi 3 digit terkhir NIM int main () using namespace std; menunjukkan sebuah alamat
semuaanggotakelompo { int main ()
padaintpada nilai perjumlahan
int nim[10],*kelompok; {
k,lalutampilkanhanya nim[0]=062; int yang bernilai
nim[1]=061; nim[3],*kelompok;
NIM nilai[0] = 125;
nim[2]=017; nim[0]=062;
nim[3]=010; nim[1]=061;
}
8 Membuat program #include <stdio.h> #include <iostream> Dengan pointer menujukkan
void misteril (char *s) using namespace std;
menggunakanpointer { void misteril (char *s) alamat pada programan dengan
untukmengubahnama while (*s !='\0') {
string memberikan lebih
{ while (*s !='\0')
yang { banyak karakter yang akan dituju
if(*s>='a'&&*s<='z')
ditulismenggunakanhur dan void tidak memberikan nilai
*s-=32; if(*s>='a'&&*s<='z'
ufkecilmenjadinamamen ++s; ) tetapi hanya proses, menampilkan
} *s-=32;
ggunakanhurufbesar. } ++s; tulisan bukan hitungan.
int main() }
{ }
int main()
charstring[]="wilitama {
"; char
printf("string string[]="wilitama";
sebelum proses adalah cout<<"string
%s\n",string); sebelum proses adalah
"<<string<<"\n";
misteril(string);
printf("string misteril(string);
setelah proses adalah cout<<"string
%s",string); setelah proses adalah
} "<<string;
}
9 Mengisipointerdengan #include <iostream> #include <iostream> Ketika fungsi penjumlahan()
using namespace std; using namespace std;
data statisnama- main() main() dengan parameter berupa pointer
namaanggotakelompok, { { dipanggil, variabel yang
int a; int a;
lalumenampilkanhanyan char char digunakan sebagai parameter
*nama[]={"wili","andri","gal *nama[]={"wili","andri","
amasendiri. aktual atau argument yaitu
an","wanda","ana","decky","a galan","wanda","ana","dec
jis","rahmat"}; ky","ajis","rahmat"}; variabel bilangan1 dan bilangan2
cout<<"Nama Ke "; printf("Nama Ke ");
cin>>a; scanf("%d",&a); dapat diubah nilainya
a-=1; a-=1;
cout<<*(nama+a); printf("%s",*(nama+
} a));
}
10 Memberinilaiarray x #include <iostream> Pada penunjuk alamat sebagai
yang berukuran 4 using namespace std; pointer dengan array yang
int main()
cout<<"Tahun = "<<*(ptgl
+ 2) <<"\n";
return 0;
}
12 Membuatarray yang #include <iostream> Saat pointer di deklarasi ke
using namespace std;
berisi 2 digit pointer point dengan itu array
int main(){
terakhirsemuakelompok int nim[5] = akan menyimpan data yang
{62,10,18,61};
, laluubahlah NIM int *pointerArray; tipenya sama. Kemudian fungsi
pointerArray = nim;
ketuakelompokmenjadi cout<<"Nim
utama dijalankan untuk
NIM kalian Awal\n\n\n"<<endl; memanggil nilai yang di deklarasi
for(int i=0;i<5;i++)
menggunakanpointerta { padapointer dan array.
cout<<"Nim =
mpilkansebelumdanses "<<nim[i]<<endl;
}
udahdiubah. *(pointerArray+0) = 10;
cout<<"nim setelah
diubah"<<endl;
for (int i=0; i<5; i++){
cout<<"Nim =
"<<*(pointerArray+i)<<end
l;
}
return 0;
}
13 Buatlahfungsiperkaliand #include <stdio.h> #include <iostream> Disini kita menggunakan pointer
penjumlahan(float using namespace std;
anpembagiandimanapoi *bil1,float *bil2) untuk memanggil parameter
{ float kali = *bil1* hitung(float *bil1,float
5.3 Kesimpulan
1. Suatu pointer (variabel penunjuk) adalah suatu variabel yang berisi dengan alamat
lokasi suatu memori tertentu. Jadi suatu pointer bukan terisi dengan suatu nilai
data, tetapi berisi dengan suatu alamat.
Manfaat dari pointer yaitu:
- Untuk menyimpan alamat memori dari sebuah variabel (data type atau object
dari class).
2. Variabel bertipe pointer ditandai dengan adanya tanda asterisk (*)tepat sebelum
penulisan tipe data ketika deklarasi.
var number *int
var name *string
Nilai default variabel pointer adalah nil (kosong). Variabel pointer tidak bisa
menampung nilai yang bukan pointer, dan sebaliknya variabel biasa tidak bisa
menampung nilai pointer.
Variabel biasa sebenarnya juga bisa diambil alamat dari sebuah variabel ,
caranya dengan menambahkan tanda ampersand (&)tepat sebelum nama
variabel. Metode ini disebut dengan referencing.
DAFTAR PUSTAKA
Bachtiar, Adam Mukharil.2017.pemrograman C dan C++.Bandung: informatika