tat mata kuliah pemrogra pointe bab xi r if · tipe data pada pendeklarasian variabel pointer harus...

22
DISU DIK Pe mem tida bah men seo men aka pen Al alam seo men mem vari poin alam USUN OLEH KTAT PEMR endahu Secara mori yang ak sesulit y hasa-bahasa nggunakan Ada sat rang progr nyebabkan n dipelajar ngaplikasian lamat Seperti mat. Di da rang progra nyimpan v mori untuk Pointer iabel. Seba nter dan s matnya aka H : ADAM MU OGRAMAN DIuluan konsep po menyimpa yang dibaya a ini me pointer. tu hal yang rammer m sistem ope ri cara me nnya di dala dan P yang dike lam alama ammer tida ariabel kar setiap vari r di dalam p agai contoh ebuah var an ditunjuk UKHARIL BA I KTAT MATPointointer adala an suatu n angkan. Sa endukung g harus dipe menggunaka erasi menja nggunakan am program ointer etahui, sat at memori ak perlu me rena comp iabelnya ke program dim ada sebua iabel varpo k oleh point ACHTIAR, S. A KULIAH BAB X POINTE er ah sebuah v nilai. Seben alah satu k sepenuhn erhatikan d an pointer adi crash ( n pointer d m. r tu byte di inilah sebu enyebutkan piler secara etika progra maksudkan ah variabel oint yang maka gam .Kom. PEMROGRA XI ER variabel ya narnya kon elebihan ba nya untuk dalam mem dengan c rusak). Ole dari yang p dalam me uah variab n alamat m a otomatis am dijalank n untuk me bernama p akan berti mbarannya a AMAN I ng menyim nsep dari p ahasa C/C+ k pemanip mpelajari po ara yang eh sebab it paling dasa emori akan el akan dis memori yang akan me kan. nunjuk sua point yang ndak seba akan sebag IF mpan suatu pointer itu ++ adalah pulasian ointer yaitu salah mak u di dalam ar sampai n memiliki simpan. Te g digunaka mesankan atu alamat bertindak gai variabe gai berikut: HAL 1 F alamat sendiri karena memori apabila ka akan bab ini kepada sebuah entunya n untuk alamat memori sebagai el yang

Upload: lyhanh

Post on 27-Apr-2018

225 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: TAT MATA KULIAH PEMROGRA POINTE BAB XI R IF · Tipe data pada pendeklarasian variabel pointer harus ... Akan tetapi di dalam bahasa C/C++ bisa mendeklarasikan variabel pointer tanpa

DISU

DIK

Pe

mem

tida

bah

men

seo

men

aka

pen

Al

alam

seo

men

mem

vari

poin

alam

USUN OLEH

KTAT PEMR

endahu

Secara

mori yang

ak sesulit y

hasa-bahasa

nggunakan

Ada sat

rang progr

nyebabkan

n dipelajar

ngaplikasian

lamat

Seperti

mat. Di da

rang progra

nyimpan v

mori untuk

Pointer

iabel. Seba

nter dan s

matnya aka

H : ADAM MU

ROGRAMAN

DIK

uluan

konsep po

menyimpa

yang dibaya

a ini me

pointer.

tu hal yang

rammer m

sistem ope

ri cara me

nnya di dala

dan P

yang dike

lam alama

ammer tida

ariabel kar

setiap vari

r di dalam p

agai contoh

ebuah var

an ditunjuk

UKHARIL BA

I

KTAT MATA

Pointe

ointer adala

an suatu n

angkan. Sa

endukung

g harus dipe

menggunaka

erasi menja

nggunakan

am program

ointer

etahui, sat

at memori

ak perlu me

rena comp

iabelnya ke

program dim

ada sebua

iabel varpo

k oleh point

ACHTIAR, S.

A KULIAH P

BAB XPOINTE

er

ah sebuah v

nilai. Seben

alah satu k

sepenuhn

erhatikan d

an pointer

adi crash (

n pointer d

m.

r

tu byte di

inilah sebu

enyebutkan

piler secara

etika progra

maksudkan

ah variabel

oint yang

maka gam

.Kom.

PEMROGRA

XI ER

variabel ya

narnya kon

elebihan ba

nya untuk

dalam mem

dengan c

rusak). Ole

dari yang p

dalam me

uah variab

n alamat m

a otomatis

am dijalank

n untuk me

bernama p

akan berti

mbarannya a

AMAN I

ng menyim

nsep dari p

ahasa C/C+

k pemanip

mpelajari po

ara yang

eh sebab it

paling dasa

emori akan

el akan dis

memori yang

akan me

kan.

nunjuk sua

point yang

ndak seba

akan sebag

IF

mpan suatu

pointer itu

++ adalah

pulasian

ointer yaitu

salah mak

u di dalam

ar sampai

n memiliki

simpan. Te

g digunaka

mesankan

atu alamat

bertindak

gai variabe

gai berikut:

HAL 1

F

alamat

sendiri

karena

memori

apabila

ka akan

bab ini

kepada

sebuah

entunya

n untuk

alamat

memori

sebagai

el yang

Page 2: TAT MATA KULIAH PEMROGRA POINTE BAB XI R IF · Tipe data pada pendeklarasian variabel pointer harus ... Akan tetapi di dalam bahasa C/C++ bisa mendeklarasikan variabel pointer tanpa

DISU

DIK

Me

ope

vari

Unt

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

USUN OLEH

KTAT PEMR

G

engeta

Alamat

erator alam

iabel bertip

uk lebih jel

/* Progr Nama Progr*/ #includ#includ int mai{ int x float print

H : ADAM MU

ROGRAMAN

Gambar 11.

ahui A

suatu va

at yaitu sim

pe integer b

lasnya buat

ram 11.1File :

rammer :

de <stdide <stdl

in(int a

x=5; t y=10.5tf("Isi

UKHARIL BA

I

1 Gambara

Alamat

riabel dap

mbol & (an

bernama x

tlah progra

1 Lat-11. Adam Mu

io.h> lib.h>

argc, cha

5; variabel

ACHTIAR, S.

an variabel

t Suatu

at diketah

d) di depa

maka unt

am berikut

.1.c ukharil

ar *argv

l x :

.Kom.

yang ditun

u Vari

hui dengan

n suatu va

uk menam

ini:

Bachtiar

v[])

: %i\n",x

njuk oleh po

iabel

n mudah.

riabel. Seb

pilkan alam

r, S.Kom

x);

ointer

Caranya g

bagai conto

matnya ada

m.

HAL 2

gunakan

h suatu

alah &x.

Page 3: TAT MATA KULIAH PEMROGRA POINTE BAB XI R IF · Tipe data pada pendeklarasian variabel pointer harus ... Akan tetapi di dalam bahasa C/C++ bisa mendeklarasikan variabel pointer tanpa

DISUSUN OLEH : ADAM MUKHARIL BACHTIAR, S.Kom.

DIKTAT PEMROGRAMAN I HAL 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:

Gambar 11.2 Hasil eksekusi program Lat 11.1

Page 4: TAT MATA KULIAH PEMROGRA POINTE BAB XI R IF · Tipe data pada pendeklarasian variabel pointer harus ... Akan tetapi di dalam bahasa C/C++ bisa mendeklarasikan variabel pointer tanpa

DISUSUN OLEH : ADAM MUKHARIL BACHTIAR, S.Kom.

DIKTAT PEMROGRAMAN I HAL 4

Mendeklarasikan Variabel Pointer

Sebenarnya variabel pointer tidak terlalu jauh berbeda dengan variabel pada

umumnya. Perbedaannya hanya terletak dari apa yang disimpannya. Bentuk umum

pendeklarasian variabel pointer adalah sebagai berikut:

tipe_data *nama_variabel;

atau

tipe_data* nama_variabel;

Bentuk umum di atas menggambarkan bahwa pointer yang dideklarasikan

akan ditempati oleh data dengan tipe yang disebutkan ketika pendeklarasian.

Sebagai contoh untuk mendeklarasikan variabel pointer yang akan menampung

menunjuk tipe data integer digunakan perintah sebagai berikut:

int *nama_variabel;

Catatan

Tipe data pada pendeklarasian variabel pointer harus sama dengan

tipe data variabel yang ditunjuk. Pemberian nama variabel pointer

disarankan menggunakan awalan p untuk mempermudah

membedakan antara variabel pointer dengan variabel biasa.

Penugasan Variabel Pointer

Setelah dideklarasikan, variabel pointer harus ditugaskan untuk menunjuk

variabel. Hal ini dilakukan supaya variabel pointer dapat menunjuk variabel lain yang

bersangkutan. Bentuk umum penugasan variabel pointer adalah sebagai berikut:

variabel_pointer=&variabel_yang_ditunjuk;

Pernyataan di atas berarti variabel pointer diisi dengan alamat dari variabel

yang ditunjuk. Untuk dapat mengakses alamat dari variabel yang ditunjuk pointer

tinggal menyebutkan nama variabel pointernya saja sedangkan untuk mengakses

nilai dari variabel yang ditunjuk oleh pointer harus menyebutkan nama variabel

pointer diawali dengan tanda *. Sebagai contoh buatlah program berikut ini:

Page 5: TAT MATA KULIAH PEMROGRA POINTE BAB XI R IF · Tipe data pada pendeklarasian variabel pointer harus ... Akan tetapi di dalam bahasa C/C++ bisa mendeklarasikan variabel pointer tanpa

DISUSUN OLEH : ADAM MUKHARIL BACHTIAR, S.Kom.

DIKTAT PEMROGRAMAN I HAL 5

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.2 Nama File : Lat-11.2.c 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"); return 0; }

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

/* Program 11.2 Nama File : Lat-11.2.cpp 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; cout<<"Hasil tanpa pointer:"<<endl;

Page 6: TAT MATA KULIAH PEMROGRA POINTE BAB XI R IF · Tipe data pada pendeklarasian variabel pointer harus ... Akan tetapi di dalam bahasa C/C++ bisa mendeklarasikan variabel pointer tanpa

DISUSUN OLEH : ADAM MUKHARIL BACHTIAR, S.Kom.

DIKTAT PEMROGRAMAN I HAL 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:

Gambar 11.3 Hasil eksekusi program Lat 11.2

Catatan

Hasil eksekusi mengunakan bahasa C akan berbeda dengan hasil

eksekusi menggunakan bahasa C++. Perbedaan terletak di dalam

menampilkan alamat memori. Bahasa C akan menyebutkan alamat

memori dengan dua nol di depan alamat memori (contoh: 0022ff44)

sedangkan C++ tidak (contoh: 22ff44).

Pointer Tidak Bertipe (Pointer Void)

Pada sub bab sebelumnya telah disebutkan bahwa untuk mendeklarasikan

variabel pointer dibutuhkan tipe data yang sama dengan tipe data variabel yang

akan ditunjuk. Akan tetapi di dalam bahasa C/C++ bisa mendeklarasikan variabel

pointer tanpa menyebutkan tipe datanya terlebih dahulu (tipe datanya diisi void). Hal

Page 7: TAT MATA KULIAH PEMROGRA POINTE BAB XI R IF · Tipe data pada pendeklarasian variabel pointer harus ... Akan tetapi di dalam bahasa C/C++ bisa mendeklarasikan variabel pointer tanpa

DISUSUN OLEH : ADAM MUKHARIL BACHTIAR, S.Kom.

DIKTAT PEMROGRAMAN I HAL 7

ini dilakukan agar satu pointer dapat menunjuk variabel yang berbeda tipe data.

Bentuk umum pendeklarasian pointer tak bertipe adalah sebagai berikut: :

void *nama_pointer;

Tetapi tetap dalam pemanggilan alamat dan pemanggilan nilainya, variabel pointer

harus disertai dengan tipe datanya. Bentuk umum pemanggilan pointer tak bertipe

adalah sebagai berikut:

//pemanggilan alamat

(tipe_data *)nama_pointer;

//pemanggilan nilai

*(tipe_data *)nama_pointer;

Untuk lebih jelasnya buatlah program berikut 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"); return 0; }

Page 8: TAT MATA KULIAH PEMROGRA POINTE BAB XI R IF · Tipe data pada pendeklarasian variabel pointer harus ... Akan tetapi di dalam bahasa C/C++ bisa mendeklarasikan variabel pointer tanpa

DISUSUN OLEH : ADAM MUKHARIL BACHTIAR, S.Kom.

DIKTAT PEMROGRAMAN I HAL 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:

Gambar 11.4 Hasil eksekusi program Lat 11.3

Page 9: TAT MATA KULIAH PEMROGRA POINTE BAB XI R IF · Tipe data pada pendeklarasian variabel pointer harus ... Akan tetapi di dalam bahasa C/C++ bisa mendeklarasikan variabel pointer tanpa

DISUSUN OLEH : ADAM MUKHARIL BACHTIAR, S.Kom.

DIKTAT PEMROGRAMAN I HAL 9

Pointer dan Array

Pointer dan array memiliki hubungan yang dekat. Secara internal array pun

menyatakan alamat. Sebagai contoh didefinisikan sebuah array yang menyimpan

lima bilangan bulat sebagai berikut:

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

Dan sebuah pointer yang akan menunjuk array tersebut sebagai berikut:

int *pbil_bulat;

Maka penugasan pointer terhadap variabel arraynya adalah sebagai berikut:

pbil_bulat=bil_bulat;

atau

pbil_bulat=&bil_bulat[indeks];

Terlihat dalam penugasan pointer di atas terdapat pernyataan yang tidak

menggunakan tanda &. Hal ini disebabkan karena nama array sebenarnya sudah

menunjuk suatu alamat sehingga tanda & tidak lagi dibutuhkan. Untuk lebih jelasnya

buatlah 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); printf("Alamat yang ditunjuk [%i] : 0x%p\n\n", i+1,pbil);

Page 10: TAT MATA KULIAH PEMROGRA POINTE BAB XI R IF · Tipe data pada pendeklarasian variabel pointer harus ... Akan tetapi di dalam bahasa C/C++ bisa mendeklarasikan variabel pointer tanpa

DISUSUN OLEH : ADAM MUKHARIL BACHTIAR, S.Kom.

DIKTAT PEMROGRAMAN I HAL 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++; } system("PAUSE"); return EXIT_SUCCESS; }

Page 11: TAT MATA KULIAH PEMROGRA POINTE BAB XI R IF · Tipe data pada pendeklarasian variabel pointer harus ... Akan tetapi di dalam bahasa C/C++ bisa mendeklarasikan variabel pointer tanpa

DISUSUN OLEH : ADAM MUKHARIL BACHTIAR, S.Kom.

DIKTAT PEMROGRAMAN I HAL 11

Hasil eksekusi:

Gambar 11.5 Hasil eksekusi program Lat 11.4

Di dalam program ini ada pernyataan pbil++. Pernyataan ini digunakan agar pointer

array tersebut bergerak untuk menunjuk data berikutnya di dalam array.

Sebenarnya ada cara lain untuk mengakses seluruh isi seluruh elemen array.

Caranya adalah sebagai berikut:

//pengaksesan nilai array

for (var=0;var<maks_array;var++)

{

//perintah output diikuti *(nama_array+var);

}

//pengaksesan alamat

for (var=0;var<maks_array;var++)

{

perintah output diikuti (nama_array+var);

}

Page 12: TAT MATA KULIAH PEMROGRA POINTE BAB XI R IF · Tipe data pada pendeklarasian variabel pointer harus ... Akan tetapi di dalam bahasa C/C++ bisa mendeklarasikan variabel pointer tanpa

DISUSUN OLEH : ADAM MUKHARIL BACHTIAR, S.Kom.

DIKTAT PEMROGRAMAN I HAL 12

Untuk lebih jelasnya buatlah program berikut:

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

/* Program 11.5 Nama File : Lat-11.5.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+i)); printf("Alamat yang ditunjuk [%i] : 0x%p\n\n",i+1, (pbil+i)); } 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.5 Nama File : Lat-11.5.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++) {

Page 13: TAT MATA KULIAH PEMROGRA POINTE BAB XI R IF · Tipe data pada pendeklarasian variabel pointer harus ... Akan tetapi di dalam bahasa C/C++ bisa mendeklarasikan variabel pointer tanpa

DISUSUN OLEH : ADAM MUKHARIL BACHTIAR, S.Kom.

DIKTAT PEMROGRAMAN I HAL 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:

Gambar 11.6 Hasil eksekusi program Lat 11.5

Pointer dan String

Pointer bisa digunakan untuk menunjuk variabel bertipe string. Untuk

menggambarkan hubungan pointer dengan string buatlah 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> int main(int argc, char *argv[]) {

Page 14: TAT MATA KULIAH PEMROGRA POINTE BAB XI R IF · Tipe data pada pendeklarasian variabel pointer harus ... Akan tetapi di dalam bahasa C/C++ bisa mendeklarasikan variabel pointer tanpa

DISUSUN OLEH : ADAM MUKHARIL BACHTIAR, S.Kom.

DIKTAT PEMROGRAMAN I HAL 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:

Gambar 11.7 Hasil eksekusi program Lat 11.6

Page 15: TAT MATA KULIAH PEMROGRA POINTE BAB XI R IF · Tipe data pada pendeklarasian variabel pointer harus ... Akan tetapi di dalam bahasa C/C++ bisa mendeklarasikan variabel pointer tanpa

DISUSUN OLEH : ADAM MUKHARIL BACHTIAR, S.Kom.

DIKTAT PEMROGRAMAN I HAL 15

Pointer Menunjuk Pointer

Selain untuk menunjuk variabel biasa, pointer juga bisa digunakan untuk

menunjuk variabel pointer yang lain. Mungkin untuk beberapa programmer pemula,

kasus ini membingungkan. Tetapi apabila sudah mempelajari struktur data (bab

linked list) maka sub bab ini menjadi berguna. Bentuk umum pointer menunjuk

pointer adalah sebagai berikut:

//pendeklarasian

tipe_data nama_variabel;

tipe_data *pointer1;//menunjuk ke variabel

tipe_data **pointer2;//menunjuk ke pointer

//penugasan

pointer1=&nama_variabel;

pointer2=&pointer1;

//pemanggilan nilai

perintah output diikuti **pointer2

//pemangilan alamat

perintah output diikuti *pointer2

Untuk lebih jelasnya buatlah program berikut:

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[]) { int x=10; int *px1; int **px2; px1=&x; px2=&px1;

Page 16: TAT MATA KULIAH PEMROGRA POINTE BAB XI R IF · Tipe data pada pendeklarasian variabel pointer harus ... Akan tetapi di dalam bahasa C/C++ bisa mendeklarasikan variabel pointer tanpa

DISUSUN OLEH : ADAM MUKHARIL BACHTIAR, S.Kom.

DIKTAT PEMROGRAMAN I HAL 16

17 18 19 20 21 22 23 24 25 26 27

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"); 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 27 28 29

/* Program 11.7 Nama File : Lat-11.7.cpp Programmer : Adam Mukharil Bachtiar, S.Kom. */ #include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) { int x=10; int *px1; int **px2; px1=&x; px2=&px1; 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"); return EXIT_SUCCESS; }

Page 17: TAT MATA KULIAH PEMROGRA POINTE BAB XI R IF · Tipe data pada pendeklarasian variabel pointer harus ... Akan tetapi di dalam bahasa C/C++ bisa mendeklarasikan variabel pointer tanpa

DISUSUN OLEH : ADAM MUKHARIL BACHTIAR, S.Kom.

DIKTAT PEMROGRAMAN I HAL 17

Hasil eksekusi:

Gambar 11.8 Hasil eksekusi program Lat 11.7

Manajemen Memori Dinamis

Salah satu pengaplikasian pointer adalah untuk manajemen memori dinamis.

Maksudnya seorang programmer bisa memesan memori untuk variabelnya ketika

program sedang dijalankan. Ada dua pasang perintah yang bisa digunakan yaitu:

1. Malloc dan free

2. New dan delete.

Malloc dan Free

Malloc adalah perintah untuk mengalokasikan memori ketika program sedang

berjalan sedangkan free adalah perintah untuk mendealokasikan memori ketika

program sedang berjalan. Bentuk umum dari malloc dan free adalah sebagai berikut:

//malloc

pointer=(tipe_data *)malloc(sizeof(tipe_data)*jumlah_data;

//free

free(pointer);

Page 18: TAT MATA KULIAH PEMROGRA POINTE BAB XI R IF · Tipe data pada pendeklarasian variabel pointer harus ... Akan tetapi di dalam bahasa C/C++ bisa mendeklarasikan variabel pointer tanpa

DISUSUN OLEH : ADAM MUKHARIL BACHTIAR, S.Kom.

DIKTAT PEMROGRAMAN I HAL 18

Untuk lebih jelasnya buatlah program berikut 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 27 28 29 30 31 32 33 34 35 36 37 38 39

/* Program 11.8 Nama File : Lat-11.8.c 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; }

Page 19: TAT MATA KULIAH PEMROGRA POINTE BAB XI R IF · Tipe data pada pendeklarasian variabel pointer harus ... Akan tetapi di dalam bahasa C/C++ bisa mendeklarasikan variabel pointer tanpa

DISUSUN OLEH : ADAM MUKHARIL BACHTIAR, S.Kom.

DIKTAT PEMROGRAMAN I HAL 19

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 29 30 31 32 33 34 35 36 37 38 39 40 41

/* Program 11.8 Nama File : Lat-11.8.cpp 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; } cout<<endl<<endl; //dealokasi memori free(bil); system("PAUSE"); return EXIT_SUCCESS; }

Page 20: TAT MATA KULIAH PEMROGRA POINTE BAB XI R IF · Tipe data pada pendeklarasian variabel pointer harus ... Akan tetapi di dalam bahasa C/C++ bisa mendeklarasikan variabel pointer tanpa

DISUSUN OLEH : ADAM MUKHARIL BACHTIAR, S.Kom.

DIKTAT PEMROGRAMAN I HAL 20

Hasil eksekusi:

Gambar 11.9 Hasil eksekusi program Lat 11.8

Catatan

Ada satu perbedaan di dalam bahasa c dan c++ yaitu terletak di

perintah input data dinamis. Di dalam bahasa c++ perintah cin>>

harus diikuti dengan *nama_pointer sedangkan dalam bahasa c

tidak perlu.

New dan Delete

Sama seperti malloc dan free, new digunakan untuk mengalokasikan memori

sedangkan delete untuk dealokasi memori. Tetapi perintah ini punya satu kelemahan

yaitu harus menyertakan file header cstdlib yang hanya ada di bahasa C++. Bentuk

umum new dan delete adalah sebagai berikut: :

//new

pointer=new tipe_data_pointer;//satu memori

atau

pointer=new tipe_data_pointer[jumlah_data];

//delete

delete pointer;

Page 21: TAT MATA KULIAH PEMROGRA POINTE BAB XI R IF · Tipe data pada pendeklarasian variabel pointer harus ... Akan tetapi di dalam bahasa C/C++ bisa mendeklarasikan variabel pointer tanpa

DISUSUN OLEH : ADAM MUKHARIL BACHTIAR, S.Kom.

DIKTAT PEMROGRAMAN I HAL 21

Untuk lebih jelasnya buatlah program berikut 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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41

/* Program 11.9 Nama File : Lat-11.9.cpp 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; //alokasi memori bil=new 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; } cout<<endl; //dealokasi memori delete bil; system("PAUSE"); return EXIT_SUCCESS; }

Page 22: TAT MATA KULIAH PEMROGRA POINTE BAB XI R IF · Tipe data pada pendeklarasian variabel pointer harus ... Akan tetapi di dalam bahasa C/C++ bisa mendeklarasikan variabel pointer tanpa

DISUSUN OLEH : ADAM MUKHARIL BACHTIAR, S.Kom.

DIKTAT PEMROGRAMAN I HAL 22

Hasil eksekusi:

Gambar 11.10 Hasil eksekusi program Lat 11.9