• Tidak ada hasil yang ditemukan

BAB X - BAB XI Pointer

N/A
N/A
Protected

Academic year: 2019

Membagikan "BAB X - BAB XI Pointer"

Copied!
22
0
0

Teks penuh

(1)

Pe

n dipelaj ar

ngaplikasian

agai cont oh

ebuah var

an dit unj uk

KTAT MATA

Pointe

oint er adala

an suat u n

angkan. Sa

endukung

g harus dipe

m enggunaka

erasi m enj a

nggunakan

am program

ointer

et ahui, sat

at m em ori

ak perlu m e

rena com p

iabelnya ke

program dim

ada sebua

iabel var po

k oleh point

A KULIAH P

BAB X

POINTE

er

ah sebuah v

nilai. Seben

alah sat u k

sepenuhn

erhat ikan d

an point er

et ika progra

m aksudkan

ah variabel

oint yang

m ak a gam

PEMROGRA

XI

ER

variabel y a

narnya k on

elebihan ba

nya unt uk

dalam m em

dengan c

rusak) . Ole

dari yang p

dalam m e

uah v ariab

n alam at m

a ot om at is

am dij alank

n unt uk m e

bernam a p

akan bert i

m barannya a

AMAN I

ng m enyim

nsep dari p

ahasa C/ C+

k pem anip

m pelaj ari po

ara y ang

eh sebab it

paling dasa

em ori akan

el akan dis

m em ori yang

akan m e

k an.

nunj uk sua

point yang

gai berikut :

(2)

Me

erat or alam

iabel bert ip

uk lebih j el

t lah progra

1

an variabel

t Suatu

bagai cont o

m at ny a ada

m.

gunakan

h suat u

(3)

15 16 17 18 19 20

printf("Alamat variabel x : 0x%p\n\n",&x); printf("Isi variabel y : %f\n",y);

printf("Alamat variabel y : 0x%p\n\n",&y); system("PAUSE");

return 0; }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

/*

Program 11.1

Nama File : Lat-11.1.cpp

Programmer : Adam Mukharil Bachtiar, S.Kom. */

#include <cstdlib> #include <iostream>

using namespace std;

int main(int argc, char *argv[]) {

int x=5;

float y=10.5;

cout<<"Isi variabel x : "<<x<<endl;

cout<<"Alamat variabel x : "<<&x<<endl<<endl; cout<<"Isi variabel y : "<<y<<endl;

cout<<"Alamat variabel y : "<<&y<<endl<<endl; system("PAUSE");

return EXIT_SUCCESS; }

Hasil eksekusi:

(4)

Mendeklarasikan Variabel Pointer

Sebenarny a variabel point er t idak t erlalu j auh berbeda dengan variabel pada

um um nya. Per bedaannya hanya t erlet ak dari apa yang disim pannya. Bent uk um um

pendeklarasian v ariabel point er adalah sebagai berikut :

t ipe _ da t a * n a m a _ va r ia be l; a t a u

t ipe _ da t a * n a m a _ v a r ia be l;

Bent uk um um di at as m enggam barkan bahwa point er yang dideklarasikan

akan dit em pat i oleh dat a dengan t ipe y ang disebut kan ket ik a pendeklarasian.

Sebagai cont oh unt uk m endeklarasikan variabel point er y ang akan m enam pung

m enunj uk t ipe dat a int eger digunakan perint ah sebagai berikut :

in t * n a m a _ va r ia be l;

Cat at an Tipe dat a pada pendeklarasian variabel point er harus sam a dengan

t ipe dat a variabel y ang dit unj uk. Pem berian nam a variabel point er

disarankan m enggunakan awalan p unt uk m em perm udah

m em bedakan ant ara variabel point er dengan variabel biasa.

Penugasan Variabel Pointer

Set elah didek larasik an, v ariabel point er harus dit ugask an unt uk m enunj uk

variabel. Hal ini dilakukan supaya variabel point er dapat m enunj uk variabel lain yang

bersangk ut an. Bent uk um um penugasan v ariabel point er adalah sebagai berikut :

va r ia be l_ point e r = & v a r ia be l_ ya n g_ dit u n j u k ;

Pernyat aan di at as berart i var iabel point er diisi dengan alam at dar i variabel

yang dit unj uk. Unt uk dapat m engakses alam at dari variabel yang dit unj uk point er

t inggal m enyebut kan nam a variabel point erny a saj a sedangkan unt uk m engakses

nilai dari variabel yang dit unj uk oleh point er harus m enyebut kan nam a variabel

(5)

1

Programmer : Adam Mukharil Bachtiar, S.Kom. */

#include <stdio.h> #include <stdlib.h>

int main(int argc, char *argv[]) {

int v; int *pv;

printf("Masukkan nilai v : ");scanf("%i",&v); printf("\n");

//penugasan pointer pv=&v;

printf("Hasil tanpa pointer:\n"); printf("Nilai v : %i\n",v);

printf("Alamat v : 0x%p\n\n",&v); printf("Hasil tanpa pointer:\n"); printf("Nilai v : %i\n",*pv); printf("Alamat v : 0x%p\n\n",pv); system("PAUSE");

Programmer : Adam Mukharil Bachtiar, S.Kom. */

#include <cstdlib> #include <iostream>

using namespace std;

int main(int argc, char *argv[]) {

int v; int *pv;

cout<<"Masukkan nilai v : ";cin>>v; cout<<endl;

//penugasan pointer pv=&v;

(6)

21 22 23 24 25 26 27 28

cout<<"Nilai v : "<<v<<endl;

cout<<"Alamat v : "<<&v<<endl<<endl; cout<<"Hasil tanpa pointer:"<<endl; cout<<"Nilai v : "<<*pv<<endl;

cout<<"Alamat v : "<<pv<<endl<<endl; system("PAUSE");

return EXIT_SUCCESS; }

Hasil eksekusi:

Gam bar 11.3 Hasil eksekusi program Lat 11.2

Cat at an Hasil eksekusi m engunakan bahasa C akan berbeda dengan hasil

eksekusi m enggunakan bahasa C+ + . Perbedaan t erlet ak di dalam

m enam pilkan alam at m em ori. Bahasa C akan m enyebut kan alam at

m em ori dengan dua nol di depan alam at m em ori ( cont oh: 0022ff44)

sedangkan C+ + t idak ( cont oh: 22ff44) .

Pointer Tidak Bertipe (Pointer Void)

Pada sub bab sebelum nya t elah disebut kan bahw a unt uk m endeklarasikan

variabel point er dibut uhk an t ipe dat a yang sam a dengan t ipe dat a variabel yang

akan dit unj uk. Akan t et api di dalam bahasa C/ C+ + bisa m endeklarasikan var iabel

(7)

ini dilakukan agar sat u point er dapat m enunj uk variabel yang berbeda t ipe dat a.

Bent uk um um pendeklarasian point er t ak bert ipe adalah sebagai berikut : :

void * n a m a _ poin t e r ;

Tet api t et ap dalam pem anggilan alam at dan pem anggilan nilainya, variabel point er

harus disert ai dengan t ipe dat any a. Bent uk um um pem anggilan point er t ak bert ipe

adalah sebagai berikut :

/ / pe m a n ggila n a la m a t ( t ipe _ da t a * ) na m a _ poin t e r ; / / pe m a n ggila n n ila i

* ( t ipe _ da t a * ) n a m a _ poin t e r ;

Unt uk lebih j elasny a buat lah program berik ut ini:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

/*

Program 11.3

Nama File : Lat-11.3.c

Programmer : Adam Mukharil Bachtiar, S.Kom. */

#include <stdio.h> #include <stdlib.h>

int main(int argc, char *argv[]) {

void *p; int x; float y;

printf("Masukkan nilai x : ");scanf("%i",&x); printf("Masukkan nilai y : ");scanf("%f",&y); p=&x;

printf("\n");

printf("Nilai x = %i\n",*(int *)p); printf("Alamat x = 0x%p\n\n",(int *)p); p=&y;

printf("Nilai y = %f\n",*(float *)p); printf("Alamat y = 0x%p\n\n",(float *)p); system("PAUSE");

(8)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

26 27 28

/*

Program 11.3

Nama File : Lat-11.3.cpp

Programmer : Adam Mukharil Bachtiar, S.Kom. */

#include <cstdlib> #include <iostream>

using namespace std;

int main(int argc, char *argv[]) {

void *p; int x; float y;

cout<<"Masukkan nilai x : ";cin>>x; cout<<"Masukkan nilai y : ";cin>>y; p=&x;

cout<<endl;

cout<<"Nilai x = "<<*(int *)p<<endl;

cout<<"Alamat x = "<<(int *)p<<endl<<endl; p=&y;

cout<<"Nilai y = "<<*(float *)p<<endl; cout<<"Alamat y = "<<(float *)p

<<endl<<endl; system("PAUSE"); return EXIT_SUCCESS; }

Hasil eksekusi:

(9)

Pointer dan Array

Point er dan array m em iliki hubungan yang dekat . Secara int ernal array pun

m enyat akan alam at . Sebagai cont oh didefinisikan sebuah array yang m enyim pan

lim a bilangan bulat sebagai ber ikut :

in t bil_ bu la t [ ] = { 0 ,1 ,2 ,3 ,4 } ;

Dan sebuah point er yang ak an m enunj uk array t ersebut sebagai berikut :

in t * pbil_ bu la t ;

Maka penugasan point er t erhadap v ariabel arrayny a adalah sebagai berikut :

pbil_ bu la t = bil_ bu la t ; a t a u

pbil_ bu la t = & bil_ bu la t [ in de k s] ;

Terlihat dalam penugasan point er di at as t erdapat pernyat aan yang t idak

m enggunakan t anda &. Hal ini disebabkan karena nam a array sebenarnya sudah m enunj uk suat u alam at sehingga t anda & t idak lagi dibut uhk an. Unt uk lebih j elasnya buat lah program berikut ini:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

19 /*

Program 11.4

Nama File : Lat-11.4.c

Programmer : Adam Mukharil Bachtiar, S.Kom. */

#include <stdio.h> #include <stdlib.h>

int main(int argc, char *argv[]) {

int bil_bulat[]={0,1,2,3,4}; int *pbil,i;

//penugasan array pbil=bil_bulat; for(i=0;i<5;i++) {

printf("Nilai yang ditunjuk [%i] : %i\n", i+1,*pbil);

(10)

20 21 22 23 24

pbil++; }

system("PAUSE"); return 0;

}

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

21

22 23 24 25 26

/*

Program 11.4

Nama File : Lat-11.4.cpp

Programmer : Adam Mukharil Bachtiar, S.Kom. */

#include <cstdlib> #include <iostream>

using namespace std;

int main(int argc, char *argv[]) {

int bil_bulat[]={0,1,2,3,4}; int *pbil,i;

//penugasan array pbil=bil_bulat; for(i=0;i<5;i++) {

cout<<"Nilai yang ditunjuk ["<<i+1<<"] : "<<*pbil <<endl;

cout<<"Alamat yang ditunjuk ["<<i+1<<"] : "<<pbil <<endl<<endl;

pbil++; }

(11)

Hasil eksekusi:

Gam bar 11.5 Hasil eksekusi program Lat 11.4

Di dalam program ini ada pernyat aan pbil+ +. Pernyat aan ini digunakan agar point er array t ersebut bergerak unt uk m enunj uk dat a berikut nya di dalam array.

Sebenarnya ada cara lain unt uk m engak ses seluruh isi seluruh elem en array.

Carany a adalah sebagai berikut :

/ / pe nga k se sa n nila i a r r a y

for ( v a r = 0 ;va r < m a k s_ a r r a y;va r + + ) {

/ / pe r in t a h out pu t diik ut i * ( n a m a _ a r r a y+ va r ) ; }

/ / pe nga k se sa n a la m a t

for ( v a r = 0 ;va r < m a k s_ a r r a y;va r + + ) {

(12)

Unt uk lebih j elasny a buat lah program berik ut :

Programmer : Adam Mukharil Bachtiar, S.Kom. */

#include <stdio.h> #include <stdlib.h>

int main(int argc, char *argv[]) {

int bil_bulat[]={0,1,2,3,4}; int *pbil,i;

//penugasan array pbil=bil_bulat; for(i=0;i<5;i++) {

printf("Nilai yang ditunjuk [%i] : %i\n",i+1, *(pbil+i));

printf("Alamat yang ditunjuk [%i] : 0x%p\n\n",i+1, (pbil+i));

Programmer : Adam Mukharil Bachtiar, S.Kom. */

#include <cstdlib> #include <iostream>

using namespace std;

(13)

20

21

22 23 24 25

cout<<"Nilai yang ditunjuk ["<<i+1<<"] : " <<*(pbil+i)<<endl;

cout<<"Alamat yang ditunjuk ["<<i+1<<"] : " <<(pbil+i)<<endl<<endl;

}

system("PAUSE"); return EXIT_SUCCESS; }

Hasil eksekusi:

Gam bar 11.6 Hasil eksekusi program Lat 11.5

Pointer dan String

Point er bisa digunakan unt uk m enunj uk variabel bert ipe st ring. Unt uk

m enggam bark an hubungan point er dengan st ring buat lah program berikut ini:

1 2 3 4 5 6 7 8 9 10 11

/*

Program 11.6

Nama File : Lat-11.6.c

Programmer : Adam Mukharil Bachtiar, S.Kom. */

#include <stdio.h> #include <stdlib.h>

(14)

12 13 14 15 16 17

char *pstring="UNIKOM";

printf("Nilai string = %s\n",pstring);

printf("Alamat string = 0x%p\n\n",&pstring); system("PAUSE");

return 0; }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

/*

Program 11.6

Nama File : Lat-11.6.cpp

Programmer : Adam Mukharil Bachtiar, S.Kom. */

#include <cstdlib> #include <iostream>

using namespace std;

int main(int argc, char *argv[]) {

char *pstring="UNIKOM";

cout<<"Nilai string = "<<pstring<<endl;

cout<<"Alamat string = "<<&pstring<<endl<<endl; system("PAUSE");

return EXIT_SUCCESS; }

Hasil eksekusi:

(15)

Pointer Menunjuk Pointer

Selain unt uk m enunj uk variabel biasa, point er j uga bisa digunakan unt uk

m enunj uk variabel point er yang lain. Mungkin unt uk beberapa program m er pem ula,

kasus ini m em bingungkan. Tet api apabila sudah m em pelaj ari st rukt ur dat a ( bab

linked list ) m ak a sub bab ini m enj adi ber guna. Bent uk um um point er m enunj uk

point er adalah sebagai berikut :

/ / pe n de k la r a sia n

t ipe _ da t a na m a _ va r ia be l;

t ipe _ da t a * poin t e r 1 ;/ / m e n u n j uk k e va r ia be l t ipe _ da t a * * poin t e r 2 ;/ / m e n u nj u k k e poin t e r / / pe n u ga sa n

point e r 1 = & n a m a _ v a r ia be l; point e r 2 = & poin t e r 1 ;

/ / pe m a n ggila n n ila i

pe r int a h ou t put diik u t i * * poin t e r 2 / / pe m a n gila n a la m a t

pe r int a h ou t put diik u t i * point e r 2

Unt uk lebih j elasny a buat lah program berik ut :

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

/*

Program 11.7

Nama File : Lat-11.7.c

Programmer : Adam Mukharil Bachtiar, S.Kom. */

#include <stdio.h> #include <stdlib.h>

int main(int argc, char *argv[]) {

(16)

17

printf("Hasil menggunakan 1 pointer\n"); printf("Nilai x = %i\n",*px1);

printf("Alamat x = %p\n",px1); printf("Alamat px1 = %p\n\n",&px1);

printf("Hasil menggunakan pointer ke pointer\n"); printf("Nilai x = %i\n",**px2);

printf("Alamat x = %p\n",*px2); printf("Alamat px1 = %p\n\n",px2); system("PAUSE");

Programmer : Adam Mukharil Bachtiar, S.Kom. */

#include <cstdlib> #include <iostream>

using namespace std;

int main(int argc, char *argv[]) {

cout<<"Hasil menggunakan 1 pointer"<<endl; cout<<"Nilai x = "<<*px1<<endl;

cout<<"Alamat x = "<<px1<<endl;

cout<<"Alamat px1 = "<<&px1<<endl<<endl;

cout<<"Hasil menggunakan pointer ke pointer"<<endl; cout<<"Nilai x = "<<**px2<<endl;

cout<<"Alamat x = "<<*px2<<endl;

cout<<"Alamat px1 = "<<px2<<endl<<endl; system("PAUSE");

(17)

Hasil eksekusi:

Gam bar 11.8 Hasil eksekusi program Lat 11.7

Manajemen Memori Dinamis

Salah sat u pengaplikasian point er adalah unt uk m anaj em en m em ori dinam is.

Maksudny a seorang program m er bisa m em esan m em ori unt uk variabelnya ket ika

program sedang dij alankan. Ada dua pasang perint ah yang bisa digunakan yait u:

1. Malloc dan free

2. New dan delet e.

Malloc dan Free

Malloc adalah per int ah unt uk m engalokasikan m em ori k et ika program sedang

berj alan sedangkan free adalah perint ah unt uk m endealok asikan m em ori ket ika

program sedang berj alan. Bent uk um um dari m alloc dan free adalah sebagai berikut :

/ / m a lloc

poin t e r = ( t ipe _ da t a * ) m a lloc( siz e of( t ipe _ da t a ) * j u m la h _ da t a ; / / fr e e

(18)

Unt uk lebih j elasny a buat lah program berik ut ini:

Programmer : Adam Mukharil Bachtiar, S.Kom. */

#include <stdio.h> #include <stdlib.h>

int main(int argc, char *argv[]) {

int *bil;

int i,jumlah_bil;

printf("Masukkan jumlah data : "); scanf("%i",&jumlah_bil);

//penugasan pointer dan alokasi memori bil=(int *)malloc(sizeof(int)*jumlah_bil);

//input data printf("\n");

for(i=0;i<jumlah_bil;i++) {

printf("Bilangan ke-%i : ",i+1);scanf("%i",(bil+i)); }

//output data printf("\n");

for(i=0;i<jumlah_bil;i++) {

printf("Bilangan ke-%i = %i\n",i+1,*(bil+i)); }

printf("\n\n");

//dealokasi memori free(bil);

system("PAUSE"); return 0;

(19)

1

Programmer : Adam Mukharil Bachtiar, S.Kom. */

#include <cstdlib> #include <iostream>

using namespace std;

int main(int argc, char *argv[]) {

int *bil;

int i,jumlah_bil;

cout<<"Masukkan jumlah data : ";cin>>jumlah_bil;

//penugasan pointer dan alokasi memori bil=(int *)malloc(sizeof(int)*jumlah_bil);

//input data cout<<endl;

for(i=0;i<jumlah_bil;i++) {

cout<<"Bilangan ke-"<<i+1<<" : ";cin>>*(bil+i); }

//output data cout<<endl;

for(i=0;i<jumlah_bil;i++) {

cout<<"Bilangan ke-"<<i+1<<" = "<<*(bil+i)<<endl; }

(20)

Hasil eksekusi:

Gam bar 11.9 Hasil eksekusi program Lat 11.8

Cat at an Ada sat u perbedaan di dalam bahasa c dan c+ + yait u t erlet ak di

perint ah input dat a dinam is. Di dalam bahasa c+ + perint ah cin> >

harus diikut i dengan * nam a_point er sedangkan dalam bahasa c

t idak perlu.

New dan Delete

Sam a seper t i m alloc dan fr ee, new digunakan unt uk m engalokasikan m em ori

sedangk an delet e unt uk dealokasi m em ori. Tet api perint ah ini punya sat u kelem ahan

yait u harus m enyert akan file header cst dlib yang hanya ada di bahasa C+ +. Bent uk um um new dan delet e adalah sebagai berikut : :

/ / n e w

poin t e r = n e w t ipe _ da t a _ poin t e r ;/ / sa t u m e m or i a t a u

poin t e r = n e w t ipe _ da t a _ poin t e r [ j u m la h_ da t a ] ; / / de le t e

(21)

Unt uk lebih j elasny a buat lah program berik ut ini:

Programmer : Adam Mukharil Bachtiar, S.Kom. */

#include <cstdlib> #include <iostream>

using namespace std;

int main(int argc, char *argv[]) {

int *bil;

int i,jumlah_bil;

cout<<"Masukkan jumlah data : ";cin>>jumlah_bil;

for(i=0;i<jumlah_bil;i++) {

cout<<"Bilangan ke-"<<i+1<<" : ";cin>>*(bil+i); }

//output data cout<<endl;

for(i=0;i<jumlah_bil;i++) {

(22)

Hasil eksekusi:

Gambar

Gambar 11.2 Hasil eksekusi program Lat 11.1
Gambar 11.3 Hasil eksekusi program Lat 11.2
Gambar 11.4 Hasil eksekusi program Lat 11.3
Gambar 11.5 Hasil eksekusi program Lat 11.4
+6

Referensi

Dokumen terkait

Sehubungan dengan pelaksanaan Pengadaan Barang / Jasa dilingkungan Dinas Pekerjaan Umum Kabupaten Pesawaran Tahun Anggaran 2016 Pada Kegiatan Pembangunan Sarana Dan Prasarana

Paket pengadaan ini terbuka untuk penyedia jasa yang memenuhi persyaratan dengan terlebih dahulu melakukan registrasi pada Layanan Pengadaan Secara Elektronik (LPSE)

Peserta yang mendapat giliran, masuk ke dalam kelas, sedangkan peserta lain menunggu dengan tertib.. Satu Nusa Satu Bangsa ciptaan L.Manik

 Kata moral pada umumnya dipakai untuk menunjuk kepada suatu tindakan atau perbuatan yang sesuai dengan ide-ide umum yang berlaku dalam suatu masyarakat!.  Menunjuk kepada

Klarifikasi Akta Pendirian / Perubahan Perusahaan, Surat Ijin Usaha Perdagangan dengan bidang / sub bidang Event Organizer, Tanda Daftar Perusahaan (TDP), Surat

angka 36.5 yang berbunyi, setelah pemberitahuan adanya pelelangan gagal, maka Pokja ULP atau Pokja ULP Pengganti (apabila ada) meneliti dan menganalisis penyebab terjadinya

[r]

skripsi dengan judul “ Pengaruh Konsentrasi Perekat Daun Jambu Mete dan Tekanan Pengempaan dalam Pembuatan Briket dari Sekam Padi dan Ketaman Kayu ”, ber