Anda di halaman 1dari 18

Modul V Pointer

MODUL V
POINTER

5.1 Tujuan
1. Mahasiswa dapat memahami definisi dan kegunaan pointer.
2. Mahasiswa dapat mengetahui bagaimana mengimplentasikan pointer dalam
program.

5.2 Dasar Teori


5.2.1 Pengertian pointer
Pointer adalah operator penunjuk alamat yang berisi alamat memory sebagai
nilainya dan berbeda dengan variable biasa yang berisi nilai tertentu. Dengan kata
lain, pointer berisi alamat dari variable yang mempunyai nilai tertentu.
5.2.2 Perbedaan Variabel dan Pointer.
Variable Biasa Pointer
Berisi data/nilai Berisi alamat memori dari suatu variable
tertentu
Operasi yang bisa dilakukan Membutuhkan operator khusus: “&”
seperti yang menunjuk alamat dari suatu
layaknya operasi biasa: +, -, *, / variable tertentu. Operator “&” hanya
dapat dilakukan kepada variable dan
akan mengahasilkan alamat dari
variable itu. Contoh: p = &n
Yang kedua : Operator “*”. Operator ini
bersifat menggunakan nilai dari alamat
variable yang ditunjuk oleh pointer
tersebut.
Contoh: int *p;
Bersifat statis Bersifaat dinamis
Deklarasi : int a; Deklarasi : int *a

Setiap kali komputer menyimpan data, maka sistem operasi akan mengorganisasikan
lokasi pada memori pada alamat yang unik. Misal untuk alamat memori 1776, hanya

PraktikumAlgoritma dan Pemrograman 2019 Modul V - 1


Modul V Pointer

sebuah lokasi yang memiliki alamat tersebut.Dan alamat 1776 pasti terletak antara
1775 dan 1777.Nilai dari alamat inilah yang di tampilkan oleh pointer.

5.2.3 Bentuk umum Pointer dalam bahasa C dan C++


Type *variable nama

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

Operator reference yang di lambangkan dengan “ * “adalah operator


yang menunjukan isi / nilai dari variable yang di tunjuk pointer.
x = 7;
y = &x;
*y = 7 // *y = isi dari alamat x

5.2.5 Pemanfaatan pointer


Operasi Pointer untuk Array
Elemen array dapat diakses dengan menggunakan pointer, alasan
mengapa suatu array dapat diakses dengan menggunakanpointer adalah untuk

PraktikumAlgoritma dan Pemrograman 2019 Modul V - 2


Modul V Pointer

kecepatan proses program. Jika pengaksesan elemen-elemen array dilakukan


secara urut, penggunaan pointerakan menghasilkan proses program yang lebih
cepat dibandingkan dengan menggunakan indeks.
Akan tetapi jika pengaksesan elemen-elemen array menggunakan rumus-
rumus tertentu yang rumit untuk menunjukkan urutan-urutan elemennya, maka
penggunaan indeks lebih disukai, karena penggunaan pointerakan lebih rumit.
Program berikut pengaksesan elemen-elemen array menggunakanpointer

#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;

PraktikumAlgoritma dan Pemrograman 2019 Modul V - 3


Modul V Pointer

}
}

o Pointer dan string


Pointer dapat juga digunakan untuk menampilkan sebuah kata atau kalimat
misalnya char*ptokohZAF, maksudnya adalah mengalokasikan ptokoh sebagai
variable pointer yang menunjuk ke data bertipe char dan menempatkan konstanta
string “ZAF” ke suatu lokasi di memori komputer
#include <stdio.h>
#include <string.h>
#include <iostream.h>
#include <conio.h>

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();
}

o Pointer dan tipe data struktur


Seperti halnya pointer untuk variable biasa yang menunjukkan alamat letak dari
nilai variable nya, pointer untuk struktur juga menunjukkan alamat letak dari variable
strukturnya. Pointer untuk struktur juga dideklarasikan secara sama dengan variable
pointer biasa, yaitu dengan menggunakan asterisk di muka nama variable pointernya.
#include <stdio.h>
#include <string.h>
#include <iostream.h>
#include <conio.h>

struct mahasiswa{
char nim[10];
char nama[40];
float IP;

PraktikumAlgoritma dan Pemrograman 2019 Modul V - 4


Modul V Pointer

}
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>

PraktikumAlgoritma dan Pemrograman 2019 Modul V - 5


Modul V Pointer

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();
}

PraktikumAlgoritma dan Pemrograman 2019 Modul V - 6


Modul V Pointer

5.3 Jobsheet
No Latihan Script Program Kesimpulan

C C ++

1 Menampilkan alamat #include <stdio.h> #include <iostream> Ketika kita menjalankan


int main () using namespace std ;
dari variabel yang berisi { int main () programnya maka akan keluar
nomor kelompok int a = 62; { adalah alamat variable dan
int b = 27; int a = 62 ;
ditambah 2 angka NIM printf ("\nAlamat Variabel int b = 27 ; variable yang sudah kita masukan
a adalah : %p\n", &a) ; cout<<"\nAlamat Variabel
terakhir. dalam script
printf ("\nAlamat Variabel a adalah :"<<&a<<endl ;
b adalah : %p\n", &b) ; cout<<"\nAlamat Variabel
printf ("\nNilai Variabl a b adalah :"<<&b<<endl ;
adalah : %d\n",a) ; cout<<"\nNilai Variabel
printf ("\nNilai Variabl b a adalah :"<<a<<endl ;
adalah : %d\n",b) ; cout<<"\nNilai Variabel
return 0; b adalah :"<<b<<endl ;
} return 0;
}
2 Menampilkan nilai dan #include <stdio.h> #include <iostream> Di programan ini kita
int main() using namespace std;
alamat dari variabel { int main() menambahkan pointer(*) untuk
biasa yang ditampung char a[50]="wilitama {
menginisiasikan sebuah variabel
tantosa"; string a="wilitama
pada sebuah variabel char *b; tantosa"; menjadi sebuah variabel
b=&a; string *b;

PraktikumAlgoritma dan Pemrograman 2019 Modul V - 7


Modul V Pointer

pointer. Nilai berisi printf("Nilai variabel a b=&a; pointer.dan variable a menjadi


adalah: %s\n",a); cout<<"Nilai variabel a
nama. printf("Alamat dari variabel adalah: "<<a<<endl; variable b
a adalah: %p\n",&a); cout<<"Alamat variabel a
} adalah: "<<&a<<endl;
}

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

4 Menginputkan data #include <stdio.h> #include <iostream> Saat mendeklarasikan variabel


int main () using namespace std;
statis yang { int main () pointer.int *x,y;adalah tipe data
berisitanggallahir int *x,y; {
dan nama fungsi untuk tanda (*)
y=21091999; int *x,y;

PraktikumAlgoritma dan Pemrograman 2019 Modul V - 8


Modul V Pointer

(contoh : 15 Agustus x=&y; y=21091999; yang ada akan menunjukkan


printf("Alamat yang x=&y;
1997) ditunjuk pointer x = cout<<"Alamat yang alamat pada tampilan data nilai
padasebuahpointerdan %p\n",x); ditunjuk pointer x = yang sudah ada
printf("Nilai yang ditunjuk "<<x<<endl;
menampilkannilaidanala pointer x = %d\n",*x); cout<<"Nilai yang
} ditunjuk pointer x =
mat yang "<<*x<<endl;
ditunjukpointertersebut. }

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.

PraktikumAlgoritma dan Pemrograman 2019 Modul V - 9


Modul V Pointer

digit NIM terakhir. scanf("%d",&a); Angka Terakhir NIM anda


y=&a; ";
if (*y %2==0) cin>>a;
{ y=&a;
printf("Bilangan if (*y %2==0)
Yang Anda Masukkan Genap"); {
}
else cout<<"Bilangan
{ Yang Anda Masukkan
printf("Bilangan Genap";
Yang Anda Masukkan Ganjil"); }
} else
{
}
cout<<"Bilangan
Yang Anda Masukkan
Ganjil";
}

}
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;

PraktikumAlgoritma dan Pemrograman 2019 Modul V - 10


Modul V Pointer

sendirimenggunakanop nim[4]=052; nim[2]=017; nilai[1] = 345;


nim[5]=057; nim[3]=010;
erasiaritmatikapointer. nim[6]=056; nim[4]=052; nilai[2] = 750;
kelompok=&nim[1]; nim[5]=057; dengan menjukkan &nilai[0];akan
printf("3 Digit nim[6]=056;
Terakhir Dari NIM %d Adalah kelompok=&nim[1]; memberikan alamat pada nilai
NIM Dari Viviana Herlita cout<<"3 Digit
yang akan dieksekusi.
V",*myself); Terakhir Dari NIM "<<
*kelompok <<" Adalah NIM
} Dari wilitama tantosa
"<<"\n";

}
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

PraktikumAlgoritma dan Pemrograman 2019 Modul V - 11


Modul V Pointer

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()

PraktikumAlgoritma dan Pemrograman 2019 Modul V - 12


Modul V Pointer

dimananilai pointer p { kumpulan nilai data yang bertipe


int x[4], *p, k;
samadengannilai x, isi p = x; sama dalam urutan dengan itu
x[0]=2;
array sebagaiberikut: x[1]=*p + 2; pointer akan memanggil array
x[2]=*(p+1) - 7;
x[0]=bebas, x[3]=*p + *(p+2); memberikan nilai yang dijalankan
for(k=0; k<=4; k++)
x[1]=*p+digit NIM cout<<"x["<<k<<"] = "<< pada saat semua udah di
terakhirkelompok, x[k]<<"\n"; deklarasikan.
}
x[2]=*(p+1)-digit
terakhirkelompok,
x[3]=*p+*(p+2).
11 Membuatpointer yang #include <iostream> disini kita menggunakan pointer
mampumenunjukkanarr using namespace std; untuk memanggil parameter
int main()
ay yang { fungsi agar program
int tgl_lahir[] = {
berisitanggallahir 21,09,1999 };//taruh prnjumlahannya dapat berjalan
tangal tahun lahir masing
(contoh: 15,08,1997). masing
dan tidak terjadi syntax error.
int *ptgl;
ptgl = tgl_lahir;
cout<<"Diakses dengan
pointer\n";
cout<<"Tanggal = "<<
*ptgl<<"\n";
cout<<"Bulan = "<< *(ptgl
+ 1) <<"\n";

PraktikumAlgoritma dan Pemrograman 2019 Modul V - 13


Modul V Pointer

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

PraktikumAlgoritma dan Pemrograman 2019 Modul V - 14


Modul V Pointer

ntermenjadi parameter *bil2; *bil2) fungsi agar program nilai


printf("hasil kali = { float kali = *bil1
fungsitersebut. %f\n",*bil1,*bil2,kali); * *bil2; prnjumlahannya dengan kata lain
cout<<"hasil
float bagi = *bil1/ perkalian = kita menggunakan pointer disini
*bil2; \n"<<*bil1<<*bil2<<kali<<
printf("hasil bagi = endl; sebagai penyempurna parameter
%f",*bil1,*bil2,kali);
}; float bagi = *bil1/
fungsi agar dapat berjalan dan
int main() *bil2; tidak terjadi syntax error.
{ cout<<"\nhasil
float pemabgian =
bilangan1,bilangan2; \n"<<*bil1<<*bil2<<bagi<<
printf("Input nilai endl;
awal "); };
scanf("%f",&bilangan1) int main()
; {
printf("Input nilai float
"); bilangan1,bilangan2;
scanf("%f",&bilangan2) cout<<"inputkan
; nilai awal = ";
penjumlahan(&bilangan1 cin>>bilangan1;
,&bilangan2); cout<<"inputkan
} nilai kedua = ";
cin>>bilangan2;
hitung
} (&bilangan1,&bilangan2);

PraktikumAlgoritma dan Pemrograman 2019 Modul V - 15


Modul V Pointer

14 Membuat program yang .


berisiarray yang
memuat 7
namaharidanfungsi
yang
dapatmemundurkanhari
keduaharisetelahnya,
tampilkanharisebelumda
nsetelahdimundurkan.

PraktikumAlgoritma dan Pemrograman 2019 Modul V - 16


Modul V Pointer

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.

PraktikumAlgoritma dan Pemrograman 2019 Modul V - 17


Modul V Pointer

DAFTAR PUSTAKA
Bachtiar, Adam Mukharil.2017.pemrograman C dan C++.Bandung: informatika

Hartono,Jogiyanto.1993.konsep dasar pemrograman bahasa C.Yogyakarta:Andi

Raharjo,Budi.2006.borland pemrograman C++ builder.Bandung:informatika

PraktikumAlgoritma dan Pemrograman 2019 Modul V - 18

Anda mungkin juga menyukai