Anda di halaman 1dari 12

LKP 9 Pointer dan Fungsi

A. Pointer Pendeklarasian pointer A dan B adalah 2 orang mahasiswa yang baru kenalan. Meski baru kenalan, A sudah berani meminjam uang ke B. Pengalaman B bahwa kalau hanya tahu no HP A saja, maka akan susah menagih hutang. Maka B meminta alamat rumah A agar bisa mengakses rumahnya jika hendak menagih hutang. Moral dari cerita ini adalah jika kita tahu alamat dari suatu variabel, kita bisa mendapatkan akses yang lebih. alam bahasa !, alamat memori tersebut bisa disimpan dalam variabel khusus bernama pointer, yaitu variabel yang menyimpan alamat. Pointer adalah variabel yang menyimpan alamat memori dari variabel yang lain. Pointer juga memiliki tipe seperti halnya variabel biasa. Pointer dideklarasikan dengan cara menuliskan tipe data dari alamat memori yang ingin disimpan dan nama pointer didahului dengan tanda bintang "#$.

!ontoh% int *p;

null Pointer p

&etelah sebuah variabel pointer dideklarasikan, kita dapat meng' assign nilai ke pointer tersebut berupa alamat memori dari variabel yang lain dengan tipe yang sesuai. (ntuk mendapat kan alamat memori dari sebuah variabel, digunakan tanda apostrophe ")$. !ontoh% int *p; int x = 5; p = &x; Pada contoh di atas, p sekarang berisi nilai alamat memori dari *. +ama ,ariabel p=&x +ilai p menyimpan alamat x Alamat

.
Pointer p

/*0//0

1ita dapat menampilkan nilai alamat memori ini dengan menggunakan 2ungsi pustaka print2"$ dengan 2ormat 3p. !ontoh%

printf(%p, p); (ntuk mendapatkan isi dari alamat memori yang ditunjuk oleh sebuah pointer, tuliskan nama pointer didahului dengan tanda bintang "#$. 4ipe data yang dikembalikan akan sesuai dengan tipe data pointer yang telah dideklarasikan sebelumnya. !ontoh% printf(%d, *p) ; Pointer dan Array Pointer dan array memiliki hubungan yang erat. +ama variabel dari sebuah array, apabila tidak diikuti oleh tanda indeks array "56$, ekuivalen dengan alamat memori dari elemen pertama array tersebut. !ontoh% int array[5]; int *p; p = &array[0]; /* pointer menyimpan alamat elemen pertama array */ elemen array5/6 array506 7.. +ilai p berisi 0x1001 Alamat . 2 7. /*0//0
Pointer /*0//2 p

array586

/*0//.

:ebih lanjut, setiap elemen dari array tersebut dapat diakses dengan menggunakan pointer yang telah ditunjuk dengan cara menambahkan indeks yang diinginkan ke pointer. !ontoh%
printf(%d, *(p+ )) /*!ama den"an printf(%d, array[ ]);*/

&ecara umum, untuk sebuah array satu dimensi A, penulisan A5n6 dimana n adalah sebuah indeks, ekuivalen dengan #"A;n$, sedangkan )A5n6 ekuivalen dengan A;n. !ontoh %
printf(%d, p+ ) /*!ama den"an printf(%d, &array[ ]); men#eta$ alamat dari array[ ] */

(ntuk suatu array dua dimensi, secara umum penggambaran pointer hampir sama dengan array satu dimensi. 1arena array 2 dimensi juga menempati alamat memori yang berurutan. &ebagai contoh, untuk suatu array berukuran 2*2 sbb

int array[ ][ ]=%5, ,&,'(; int *p; p=&array[0][0];

<lemen array5/65/6 array5/6506 array5065/6 array506506

+ilai p berisi 0x1001 Alamat . 2 9 8 /*0//0


Pointer /*0//2 p

/*0//= /*0//8 //#eta$ //#eta$

printf()%d), *(p+*)); printf()%d), array[0][*]);

printf()%d),p+*); //#eta$ alamat elemen array[0][*] printf()%d),&array[0][*]); //#eta$ alamat elemen array[0][*]

Pointer sebagai Parameter Fungsi (Call by reference) ,ariabel pointer dapat digunakan sebagai parameter 2ungsi. alam hal ini, yang diberikan ke 2ungsi adalah alamat. >ika dalam 2ungsi tersebut mengubah isi dari alamat yang diberikan, maka jika alamat tersebut diakses di bagian lain dari program, maka yang didapatkan adalah isi paling update dari alamat tsb. !ontoh %
+in#l,de-.tdio/01 2oid 3,mla0(int *4, int y ) % *4 += y; ( int main() % int *p; int x=5; p=&x;

3,mla0(p,

);

printf(%d, x); //#eta$ 5

ret,rn 0; (

Pada program di atas, 2ungsi main memanggil 2ungsi jumlah dengan mengirimkan alamat dari variabel *, yaitu variabel pointer p. i 2ungsi jumlah, isi dari alamat yang diberikan kemudian ditambah dengan 2. 4anpa harus mengembalikan nilai ke variabel *, isi dari * otomatis akan berubah.

B. Fungsi ?ungsi adalah sub'program. Penggunaan 2ungsi dimaksudkan untuk memecah suatu program yang panjang menjadi beberapa bagian sub'program@2ungsi dan masing'masing diberi nama. &elama ini kita sudah menggunakan 2ungsi, yaitu 2ungsi main. ?ungsi main adalah 2ungsi yang pertama kali dijalankan oleh compiler. ?ungsi main kemudian dapat digunakan untuk memanggil 2ungsi'2ungsi lain yang sudah dideklarasikan di atasnya. Berikut ini adalah contoh program yang terdiri dari 2 2ungsi, 2ungsi main dan 2ungsi Hello.
+in#l,de-.tdio/01 2oid 6ello() % printf()6aiiii//7n)); ( int main() % 6ello(); ret,rn 0; (

Parameter dan eturn ?ungsi hello di atas tidak memproses suatu parameter dan tidak memiliki kembalian "void$. &uatu 2ungsi dapat menerima parameter untuk diproses dan mengembalikan hasil pemrosesan 2ungsi "return$. Berikut ini adalah contoh 2ungsi jumlah yang menerima

parameter 2 bilangan bertipe 2loat dan double, serta mengembalikan hasil penjumlahannya dalam bentuk integer.
+in#l,de-.tdio/01 int 3,mla0(float x, do,8le y ) % int 9; 9 = x+y; ret,rn 9; ( int main() % int a; float 8=5; a= 3,mla0 (8, #); printf(%d, a); ret,rn 0; (

do,8le #=&;

Perhatikan bahwa dalam memanggil 2ungsi, data yang diberikan ke 2ungsi sebagai parameter harus sesuai tipe'nya dengan deklarasi parameter 2ungsi. Pada 2ungsi jumlah di atas menerima 2 parameter, bilangan pertama bertipe 2loat, bilangan kedua bertipe double. &ehingga dalam memanggil 2ungsi tersebut, urutan parameter juga harus sesuai, yaitu 2loat kemudian double. ata kembalian 2ungsi juga harus diterima oleh variable dengan tipe yang sesuai yaitu integer.
a= 3,mla0 (8, #); // meman""il f,n".i 3,mla0 den"an men"irim$an parameter 8 8ertipe float dan # 8ertipe do,8le, $em,dian menerima 0a.il ret,rn dan ditamp,n" .e8a"ai 2aria8el a 8ertipe inte"er/

!eklarasi Fungsi &uatu 2ungsi harus dideklarasikan dahulu sebelum digunakan. eklarasi 2ungsi dapat dinyatakan dengan 2 cara, dengan menyertakan isi 2ungsi lengkapnya ataupun hanya function prototype dengan 2ungsi lengkapnya ditulis di bagian lain "tak harus sebelum pemanggilan 2ungsi$. Berikut ini contoh 2 macam deklarasi 2ungsi.
+in#l,de-.tdio/01 int 3,mla0(int x, int y ) % ret,rn x+y; ( +in#l,de-.tdio/01

int jumlah(int,int);//func prototype

int main() % printf(%d, 3,mla0(5,&)); ret,rn 0; (

int main() % printf(%d, 3,mla0(5,&)); ret,rn 0; (

int 3,mla0(int x, int y ) % ret,rn x+y; (

?unction prototype dapat ditulis dengan beberapa alternati2 sbb %


int jumlah(int x, int y ); int jumlah(int, int );

"ariabel global dan #ariabel lokal ,ariabel global adalah variabel yang bisa diakses oleh semua 2ungsi dan dideklarasikan di luar 2ungsi. &edangkan variabel lokal dideklarasikan di dalam suatu 2ungsi dan hanya bisa diakses hanya di dalam 2ungsi tersebut.

!ontoh variabel global


+in#l,de-.tdio/01 int a=5, 8=&; //a dan 8 2aria8el "lo8al, 8i.a dia$.e. .em,a f,n".i int 3,mla0() // tanpa parameter % ret,rn a+8; // a dan 8 .,da0 di$eta0,i $rn 8i.a dia$.e. (

int main() % printf(%d, 3,mla0()); ret,rn 0; (

!ontoh variabel lokal % a, b, A


+in#l,de-.tdio/01 int 3,mla0(int x, int y) % int 9; //9 2aria8el lo$al $arena dide$lara.i$an di dalam f,n".i 9=x+y; // 9 0anya 8i.a dia$.e. di dalam f,n".i 3,mla0 .a3a ret,rn 9; ( int main() % int a=5, 8=&; //a dan 8 2aria8el lo$al, 0anya 8i.a dia$.e. di main printf(%d, 3,mla0(a, 8)); ret,rn 0; (

Bab 9 Lembar Ker$a Praktikum


+ama +BP +ilai % % % 4anggal Praktikum Caktu Praktikum +ama Asisten % % %

Pen$elasan Asisten Asisten akan menjelaskan mengenai de2inisi pointer. konsep dan kegunaan pointer, hubungan pointer dan array, serta pointer sebagai argumen 2ungsi. >ika masih ada waktu asisten menjelaskan kembali tentang 2ungsi. Lembar Ker$a Bagian % (&' menit) 4uliskan program'program berikut, simpan nama 2ile sesuai dengan nama yang sudah ditentukan pada 2older, kemudian jawablah pertanyaan singkat terkait dengan program tersebut pada tempat yang telah disediakan. Dambarkan alokasi memori dan perubahan masing'masing variabel pada kotak di sebelah kanan program. Program ( )ama Program* pointer(.c +in#l,de -.tdio/01 int main() % int x = :, y = '; int *9; 9 = &x; y = *9; x = *0; *9 = :; printf(x = %d, y = %d, x, y); ret,rn 0; ( Program ( Peruba+an #ariabel * y A

Apakah output yang dicetak program di atasE &tatement apa yang harus ditambahkan agar program dapat mencetak isi dari variabel A dan mencetak isi memori yang ditunjuknyaE >awab% FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

Program , )ama Program* pointer,.c +in#l,de -.tdio/01 int main() % int a=', 8=*0, *x, *y; x = &8; *x = 0; y = x; x = &a; *x = a; 8 = *x / * ' + *y; printf()a = %d, 8 = %d, *x = %d, *y = %d7n),a,8,*x,*y); ret,rn 0; (

Program , Peruba+an #ariabel * y a b

Apakah output programE >ika pada program di atas sebelum print2 ditambahkan statement aG*;y, apa yang terjadiE >awab% FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF Program )ama Program* pointer-.c +in#l,de -.tdio/01 main() % int i; int a[5]=%*0, 0,:0,'0,50(; int *8=&a[*]; for (i=0; i-:; i++) % printf()%d ), 8[0]); 8++; ( ret,rn 0; ( Program .asil trace

Apa output program tersebutE 4uliskan proses untuk mendapatkan output tersebut pada kotak di sebelah kanan program. >awab% FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF Program & )ama Program* pointer&.c +in#l,de -.tdio/01 int ;0at(int *a, int 8) % int t=*a; *a=8; 8=t; ret,rn (*a+8); ( main() % int a=5, 8=*0, #; printf()%d %d %d7n), a, 8, ;0at(&a,8)); ret,rn 0; ( Apa yang dilakukan program di atas, dan apakah outputnyaE >awab% FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF Program ' )ama Program* pointer'.c
+in#l,de -.tdio/01 +define !<=> 5 main() %
#0ara[][!<=>]=%%?a?,?y?,?o?(,%?t?,?e?,?8?,?a?,?$?(,%?0?,?,?,?r?,?,?,?f?((; #0ar *p = &a[0][0]; #0ar *4 = a[ ]; #0ar *r = a[*];

printf()%#),*(r + !<=>)); printf()%#), *(p + !<=> + *) ); printf()%#), p[ * !<=> + ]); printf()%#), p[ * !<=> + *] ); printf()%#), *(4 @ (!<=> + :)) ); printf()%#), *r ); printf()%#), *r ); printf()%#), *(r @ :)); ret,rn 0; (

Apakah output dari program di atasE ari program di atas, dapatkah Anda menyebutkan beberapa cara dalam mengakses elemen arrayE >awab% FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F Lembar Ker$a Bagian %% (&' menit) Buatlah program sesuai dengan instruksi yang diberikan simpan nama 2ile sesuai dengan yang tertera pada soal di dalam 2older +BP Anda. /ugas (0 )ama Program* tugas(0.c Buatla+ sebua+ program untuk mencari berapa $umla+ bilangan (dari n bilangan) yang nilainya di atas rata1rata n bilangan tersebut. 2unakan array untuk melakukan penyimpanan dan pointer untuk mengakses array tersebut

Anda mungkin juga menyukai