Anda di halaman 1dari 19

MODUL PRAKTIKUM STRUKTUR DATA 2008

POINTER
C/C++
Be carefull with THIS!!
Content
Introduction
Pengertian Pointer
Deklarasi Pointer
Operasi pada Pointer
Pointer pada Array
Pointer pada Struct
Introduction
Setiap kali kita mendeklarasikan variabel, C/C++ akan menyediakan alokasi memori untuk
masing-masing variabel. Ukuran memori yang dialokasikan berbeda-beda tergantung dari
tipe data variabelnya. Misalnya untuk integer 2 bytes, untuk float 4 bytes, dst. Jadi, setiap
variabel yang kita deklarasikan mempunyai atribut yaitu address dan value!
Pengertian Pointer
Pada pertemuan kali ini, kita akan memba"as powerful feature dari ba"asa pemograman C/C+
+, yaitu pointer! Pointer #variabel penun$uk% adala" suatu variabel yang berisi alamat memori
dari suatu variabel lain! Pointer merupakan variabel level renda" yang dapat digunakan untuk
menun$uk nilai integer, c"aracter, &loat, double, atau single, dan ba"kan tipe-tipe data lain yang
didukung ole" ba"asa C!
'ariabel biasa, si&atnya statis dan suda" pasti, sedangkan pada pointer si&atnya dinamis dan
dapat lebi" &leksibel! 'ariabel pointer yang tidak menun$uk pada nilai apapun berarti memiliki
nilai ()**, dan disebut sebagai dangling pointer karena nilainya tidak diinisialisasi dan tidak
dapat diprediksi!
Deklarasi Pointer
Seperti "alnya variabel yang lain, variabel pointer $uga "arus dideklarasikan terlebi" da"ulu
sebelum digunakan!
+entuk )mum , tipe_data *nama_pointer;
Conto" , int *nilai;
!ar *!uruf;
Pendeklarasian variabel pointer menggunakan tanda - sebelum nama variabelnya,
sedangkan untuk menampilkan nilai yang ditun$uk ole" suatu variabel pointer, $uga
digunakan operator - #tanda asterisk%! .ika diinginkan untuk menampilkan alamat
tempat penyimpanan nilai yang ditun$uk ole" suatu variabel pointer, digunakan operator
/ #tanda ampersand%!
Operasi pada Pointer
"perasi #enugasan
Suatu variable pointer seperti "alnya variable yang lain, $uga bisa mengalami operasi
penugasan! (ilai dari suatu variable pointer dapat disalin ke variable pointer yang lain
Operator #/% dalam kaitannya dengan pointer adala" operator yang mengembalikan
alamat memori dari operandnya! Conto"nya ,
int y = 5; /*deklarasi variabel y*/
int *yPtr; /*deklarasi variabel pointer yPtr*/
yPtr = &y; /*mengisi variabel pointer yPtr dengan alamat dari
variabel y*/
0aka representasi dari operasi penugasan di atas adala"
1epresentasi yang lain, misalnya asumsikan ba"2a variabel y berada pada alokasi
memori 344444 dan variabel pointer yPtr berada pada alokasi memori 544444!
Conto" program #untuk dicoba%
Pertanyaan ,
6! Perinta" apa yang digunakan untuk menampilkan alamat dari variabel i, namun
tanpa melalui pengaksesan variabel pointer ia7
Pertanyaan ,
! t = *p;
*p = *q;
*q = t;
8ungsi di atas ini #dengan pointer% untuk apaka" itu7
)ntuk membantu, coba tamba"kan perinta" di ba2a" ini pada program di atas,
printf("nilai yang ditunjuk p sekarang = d di alamat
p!n""*p"p#;
printf("nilai yang ditunjuk q sekarang = d di alamat
p!n""*q"q#;
"perasi $ritmatika
Suatu variabel pointer "anya dapat dilakukan operasi aritmatika dengan nilai integer
sa$a! Operasi yang biasa dilakukan adala" operasi penamba"an dan pengurangan!
Operasi penamba"an dengan suatu nilai menun$ukkan lokasi data berikutnya #inde9
selan$utnya% dalam memori! +egitu $uga operasi pengurangan!
Asumsikan kita tela" mendeklarasikan sebua" array float v$5%, dan anggap elemen
pertamanya berada pada lokasi :444 di memori! *alu kita deklarasikan sebua" variabel
pointer *vPtr, ada dua cara untuk mengisi variabel pointer *vPtr dengan alamat dari
elemen pertama array v, yaitu ,
float *vPtr = v;
float *vPtr = &v$&%;
.ika kita melakukan operasi aritmatika seperti
vPtr '= (;
dalam per"itungan aritmatika biasa, maka vPtr yang semula berisi :444 men$adi :444
+ ; :44, namun ini tidak berlaku pada pointer! Operasi aritmatika pada pointer di atas
artinya adala" vPtr yang semula menun$uk pada v$&% sekarang menun$uk ke v$(%)
<arena vPtr menun$uk alamat memori dari variabel v yang bertipe &loat, maka vPtr
sekarang berisi :44= #:444 + - >%!
Conto" program #untuk dicoba%
Pertanyaan
:! +erapa selisi" nilai #menggunakan "eksadesimal% antar penun$uk dengan
penun$uk+67 ?al apa yangmempengaru"i besarnya selisi" nilai tersebut7
)ntuk membantu, coba ganti tipe data variabel nilai dari int men$adi float!
Pointer pada Array
Pada array, pointer "anya perlu menun$uk pada alamat elemen pertama sa$a karena letak
alamat array suda" berurutan pada memori!
Conto" program #untuk dicoba%
Pertanyaan
>! @amba"kan potongan kode program pada program di atas untuk membalik suatu
kata/kalimat dengan menggunakan pointerA
Pointer pada Struct
Pointer dapat bertipe apa sa%a, ba"kan tipe buatan kita sendiri!
Conto" program #untuk dicoba%
Pointer pada Fungsi
Pointer dapat $uga digunakan sebagai parameter pada sebua" &ungsi! Parameter ini akan
bersi&at by re&erence! Artinya yang dikirimkan sebagai parameter adala" alamat variabelnya,
bukan nilainya! .adi, peruba"an nilai yang ter$adi di dalam &ungsi, akan menguba" $uga nilai dari
variabel yang alamatnya kita kirimkan! Agar lebi" $elas penggunaannya, li"atla" conto" di
ba2a" ini!
Di sini dapat kita li"at ba"2a pendeklarasian &ungsi by re&erence, akan mendeklarasikan pointer
sebagai parameternya! <emudian, yang men$adi parameter aktualnya adala" alamat memory!
Selain itu, perlu kita keta"ui ba"2a pengiriman parameter yang berupa array pada sebua"
&ungsi adala" pengiriman by re&erence, sebab yang dikirim adala" alamat memory indeks
pertama dari variabel array tersebut! 0ari kita li"at conto" di ba2a" ini!

0engirimkan alamat
memory variabel a
&ati!an
<alian tentu tela" mengenal &itur @B yang ada di "andp"one! 0isalnya saat kita mengakti&kan
@B input yang ba"asa inggris, lalu kita ingin mengetik sc"ool, maka kita cukup menekan
C>335, maka otomatis akan keluar kata Dsc"oolE!
(a", sekarang kita coba menerapkan @B didalam program lati"an kita dengan menggunakan
struct dan pointer tentunya!
Spesi&ikasi Input , Program menampilkan tulisan D0asukkan sebua" kalimat , D kemudian
program menunggu user memasukkan sebua" kalimat #tidak lebi" dari 644 karakter%!
Spesi&ikasi output , Program akan menguba" kalimat yang dimasukkan user men$adi rangkaian
angka dengan menggunakan tabel @B!
@B 4 6 : > 5 3 C = B F
Data 4 De&ault
6
A + C

D G
8 :
H ? I
>
. < *
5
0 (
O 3
P I 1
S C
@ ) '
=
J K L
M B
Spasi
Program ini tidak case sensiti&, artinya APA dengan apa atau Apa adala" sama!
Conto",
&ati!an '
Input,
0asukkan sebua" kalimat , Aku ingin pulang
Output,
5=F>3>>3FC=53>
&ati!an 2
Input,
0asukkan sebua" kalimat , Struktur Data =5 dapat A
Output,
C=C=5==CF:=F=5F:C=F
*angka"-langka"nya,
6! Include kan &ile stdio!" dan ctype!" #ctype nantinya digunakan untuk memanggil &ungsi
toupper#c"ar c%%!
! +uat struct <ata berisi elemen yaitu elemen bertipe array o& c"aracter #elemennya
644% dan %ml_kata bertipe integer!
:! +uat sebua" variabel kata bertipe <ata dan sebua" variabel pointer p_kata bertipe (ata
dan langsung mengacu pada alamat dari variabel kata!
>! Dalam &ungsi main)* buat variabel kalimat bertipe array o& c"aracter dengan 644
elemen!
5! Selan$utnya ikuti code di ba2a" ini!
*an$utkan program di atas agar sesuai dengan spesi&ikasi input dan outputA
?int ,
Conto" Output Program ,
&ati!an +
+uatla" program seNuential searc"ing dengan menggunakan variabel pointerA
&ati!an 4
+uatla" program seNuential searc"ing dengan menggunakan variabel pointerA
,ake -ome assignment
6! +uatla" sebua" program yang dapat mencari sebua" "uru& dalam sebua" kata! <ata
dapat diinisialisasi terlebi" da"ulu! Hunakan pointer untuk men$adi counter!
! +ila soal no!6 suda" terselesaikan, cobala" untuk membuat program yang sama tetapi
dengan input kata yang dinamis!
DAFTAR PUSTAKA
Deitel, ?arvey 0 dan Paul . Deitel! 445! C++ How to Program, Fifth Edition. (e2 .ersey,
Prentice ?all!
Des"pande, P! S dan O! H! <akde! 44:. C & Data Structures! 0assac"usetts , Dreamtec"
Press!
Solic"in, Ac"mad! 44:! Pemograman ahasa C dengan !ur"o C! Ilmu<omputer!Com!
0ateri Struktur Data @I )<DJ ole" Antonius 1ac"mat C! S!<om, 0!Sc!
0ateri Praktikum Struktur Data 44C ole" @I0 Asisten Praktikum Struktur Data 44C!
Struct adala" tipe data bentukan yang berisi kumpulan variabel-variabel
yang bernaung dalam satu nama yang sama dan memiliki kaitan satu sama
lain!
+erbeda dengan array "anya berupa kumpulan variabel yang bertipe data
sama, struct bisa memiliki variabel-variabel yang bertipe data sama atau
berbeda, ba"kan bisa menyimpan variabel yang bertipe data array atau
struct itu sendiri!
'ariabel-variabel yang men$adi anggota struct disebut dengan elemen
struct!
Praktikum Struktur Data @eknik In&ormatika - )(IS+A(<
Page 5 o& 6:
*ast saved by <G(<GI(A Structur Data, AD@, S@1)C@
Created by <G(<GI(A
+entuk umum,
Ilustrasi struct
Pendeklarasian dan penggunaan Struct #6% #menggunakan
typede&%
typede& struct 0a"asis2a O
c"ar (I0P=QR
c"ar namaP54QR
&loat ipkR
SR (ote , untuk model ini mungkin tidak semua versi bisa
typede& struct O
tipeTdata UnamaTvariableT6VR
tipeTdata UnamaTvariableTV
! ! ! !R
@ipeTdata UnamaTvariableTnV
S
struct bisa diumpamakan sebagai sebua"
ob$ek, misalnya ,ob$ek ma"asis2a
struct ma"asis2a memeiliki property atau
attribute atau variable yang melekat
padanya,
- (I0 yaitu karakter se$umla" =
atau 64
- (ama yaitu karakter
- IP< yaitu bilangan peca"an
struct tidak memilikioperasi #met"ode%
atau &unction!
struct dapat digunakan dengan craa
membuat variable yang bertipe struct
tersebut!
0isalnya ,
'ariable ma"&ud bertipe struct
ma"asis2a
'ariable agus bertipe struct ma"asis2a
Dengan demikian ma"&ud dan agus
memiliki (I0, (ama, dan IP< masingmasing
Praktikum Struktur Data @eknik In&ormatika - )(IS+A(<
Page 3 o& 6:
*ast saved by <G(<GI(A Structur Data, AD@, S@1)C@
Created by <G(<GI(A
//untuk menggunakan struct 0a"asis2a dengan membuat variabel m"s dan
m"s
0a"asis2a m"s,m"sR
//untuk menggunakan struct 0a"asis2a dengan membuat variabel array mR
0a"asis2a mP644QR
Pendeklarasian dan penggunaan Struct #% #tanpa menggunakan
typede&%
struct O
c"ar (I0P=QR
c"ar namaP54QR
&loat ipkR
S m"sR
(ote , untuk model lebi" compatible disemua versi
+erarti kita suda"mempunyai variabel m"s yang bertipe data struct seperti
diatas!
Cara penggunaan struct dan pengaksesan elemen-elemennya
B Penggunaan/pemakaian tipe data struct dilakukan dengan membuat
suatu variabel yang bertipe data struct tersebut
B Pengaksesan elemen struct dilakukan secara individual dengan
menyebutkan nama variabel struct diikuti dengan operator titik #!%
B 0isalnya dengan struct ma"asis2a seperti conto" di atas, kita akan akses
elemen-elemennya seperti conto" berikut,
Conto" 6,
FincludeUstdio!"V
FincludeUconio!"V
void main#%
O
//deklarasi struct
struct ma"asis2a
O
c"ar nimP64QR
c"ar namaP64QR
int nilaiR
Sm"sP64QR
Praktikum Struktur Data @eknik In&ormatika - )(IS+A(<
Page C o& 6:
*ast saved by <G(<GI(A Structur Data, AD@, S@1)C@
Created by <G(<GI(A
int i;4R
int n;4R
//deskripsi
clrscr#%R
print&#Wmasukan $umla" data, W%R
scan&#WXdW,/n%R
clrscr#%R
&or#i;6RiU;nRi++%
O
print&#WYnnim ; W%Rscan&#WXsW,m"sPiQ!nim%R
print&#WYnnama ; W%Rscan&#WXsW,m"sPiQ!nama%R
print&#WYnnilai ; W%Rscan&#WXdW,m"sPiQ!nilai%R
print&#WYnW%R
S
&or#i;6RiU;nRi++%
O
print&#WYnnim ; XsW,m"sPiQ!nim%R
print&#WYnnama ; XsW,m"sPiQ!nama%R
print&#WYnnilai ; XdW,m"sPiQ!nilai%R
print&#WYnW%R
S
getc"e#%R
S