Upload
mohammad-rakha-mauludi
View
4
Download
0
Embed Size (px)
DESCRIPTION
lkp 9
Citation preview
LKP 9Pointer 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. Dalam bahasa C, 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 (*).
Contoh:int *p;
Setelah sebuah variabel pointer dideklarasikan, kita dapat meng-assign nilai ke pointer tersebut berupa alamat memori dari variabel yang lain dengan tipe yang sesuai. Untuk mendapat kan alamat memori dari sebuah variabel, digunakan tanda apostrophe (&).
Contoh:int *p; int x = 5; p = &x;
Pada contoh di atas, p sekarang berisi nilai alamat memori dari x.
Nama Variabel Nilai Alamat
X 5 0x1001
Kita dapat menampilkan nilai alamat memori ini dengan menggunakan fungsi pustaka printf() dengan format %p.
Contoh:
p=&x p menyimpan alamat x
Pointer p
Pointer p
null
printf(“%p”, p);Untuk mendapatkan isi dari alamat memori yang ditunjuk oleh sebuah pointer, tuliskan nama pointer didahului dengan tanda bintang (*). Tipe data yang dikembalikan akan sesuai dengan tipe data pointer yang telah dideklarasikan sebelumnya.
Contoh:printf(“%d”, *p) ;
Pointer dan Array
Pointer dan array memiliki hubungan yang erat. Nama variabel dari sebuah array, apabila tidak diikuti oleh tanda indeks array ([]), ekuivalen dengan alamat memori dari elemen pertama array tersebut.
Contoh:int array[5]; int *p;p = &array[0]; /* pointer menyimpan alamat elemen pertama array */
elemen Nilai Alamat
array[0] 5 0x1001
array[1]
…..
2
….
0x1002
…
array[4] 6 0x1005
Lebih lanjut, setiap elemen dari array tersebut dapat diakses dengan menggunakan pointer yang telah ditunjuk dengan cara menambahkan indeks yang diinginkan ke pointer.
Contoh:printf(“%d”, *(p+2)) /*Sama dengan printf(“%d”, array[2]);*/
Secara umum, untuk sebuah array satu dimensi A, penulisan A[n] dimana n adalah sebuah indeks, ekuivalen dengan *(A+n), sedangkan &A[n] ekuivalen dengan A+n.
Contoh :printf(“%d”, p+2) /*Sama dengan printf(“%d”, &array[2]); mencetak alamat dari array[2] */
p berisi 0x1001
Pointer p
Untuk suatu array dua dimensi, secara umum penggambaran pointer hampir sama dengan array satu dimensi. Karena array 2 dimensi juga menempati alamat memori yang berurutan. Sebagai contoh, untuk suatu array berukuran 2x2 sbb
int array[2][2]={5,2,6,4};int *p;p=&array[0][0];
Elemen Nilai Alamat
array[0][0] 5 0x1001
array[0][1] 2 0x1002
array[1][0] 6 0x1003
array[1][1] 4 0x1004
printf("%d", *(p+1)); //cetak 2printf("%d", array[0][1]); //cetak 2
printf("%d",p+1); //cetak alamat elemen array[0][1]printf("%d",&array[0][1]); //cetak alamat elemen array[0][1]
Pointer sebagai Parameter Fungsi (Call by reference)
Variabel pointer dapat digunakan sebagai parameter fungsi. Dalam hal ini, yang diberikan ke fungsi adalah alamat. Jika dalam fungsi 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.Contoh :
#include<stdio.h> void jumlah(int *q, int y ){ *q += y;
}
int main(){ int *p;
int x=5;
p=&x;
p berisi 0x1001
Pointer p
jumlah(p, 2);
printf(“%d”, x); //cetak 7
return 0;}
Pada program di atas, fungsi main memanggil fungsi jumlah dengan mengirimkan alamat dari variabel x, yaitu variabel pointer p. Di fungsi jumlah, isi dari alamat yang diberikan kemudian ditambah dengan 2. Tanpa harus mengembalikan nilai ke variabel x, isi dari x otomatis akan berubah.
B. Fungsi
Fungsi adalah sub-program. Penggunaan fungsi dimaksudkan untuk memecah suatu program yang panjang menjadi beberapa bagian sub-program/fungsi dan masing-masing diberi nama. Selama ini kita sudah menggunakan fungsi, yaitu fungsi main. Fungsi main adalah fungsi yang pertama kali dijalankan oleh compiler. Fungsi main kemudian dapat digunakan untuk memanggil fungsi-fungsi lain yang sudah dideklarasikan di atasnya. Berikut ini adalah contoh program yang terdiri dari 2 fungsi, fungsi main dan fungsi Hello.
#include<stdio.h> void Hello(){ printf("Haiiii..\n");} int main(){ Hello(); return 0;}
Parameter dan Return
Fungsi hello di atas tidak memproses suatu parameter dan tidak memiliki kembalian (void). Suatu fungsi dapat menerima parameter untuk diproses dan mengembalikan hasil pemrosesan fungsi (return). Berikut ini adalah contoh fungsi jumlah yang menerima
parameter 2 bilangan bertipe float dan double, serta mengembalikan hasil penjumlahannya dalam bentuk integer.
#include<stdio.h> int jumlah(float x, double y ){ int z;
z = x+y;
return z;} int main(){ int a; float b=5; double c=6;
a= jumlah (b, c);
printf(“%d”, a);
return 0;}
Perhatikan bahwa dalam memanggil fungsi, data yang diberikan ke fungsi sebagai parameter harus sesuai tipe-nya dengan deklarasi parameter fungsi. Pada fungsi jumlah di atas menerima 2 parameter, bilangan pertama bertipe float, bilangan kedua bertipe double. Sehingga dalam memanggil fungsi tersebut, urutan parameter juga harus sesuai, yaitu float kemudian double. Data kembalian fungsi juga harus diterima oleh variable dengan tipe yang sesuai yaitu integer.
a= jumlah (b, c); // memanggil fungsi jumlah dengan mengirimkan parameter b bertipe float dan c bertipe double, kemudian menerima hasil return dan ditampung sebagai variabel a bertipe integer.
Deklarasi Fungsi
Suatu fungsi harus dideklarasikan dahulu sebelum digunakan. Deklarasi fungsi dapat dinyatakan dengan 2 cara, dengan menyertakan isi fungsi lengkapnya ataupun hanya function prototype dengan fungsi lengkapnya ditulis di bagian lain (tak harus sebelum pemanggilan fungsi). Berikut ini contoh 2 macam deklarasi fungsi.
#include<stdio.h> int jumlah(int x, int y ){ return x+y;}
#include<stdio.h>
int jumlah(int,int);//func prototype
int main(){ printf(“%d”, jumlah(5,6));
return 0;}
int main()
{
printf(“%d”, jumlah(5,6));
return 0;
}
int jumlah(int x, int y )
{
return x+y;
}
Function prototype dapat ditulis dengan beberapa alternatif sbb :int jumlah(int x, int y );int jumlah(int, int );
Variabel global dan variabel lokal
Variabel global adalah variabel yang bisa diakses oleh semua fungsi dan dideklarasikan di luar fungsi. Sedangkan variabel lokal dideklarasikan di dalam suatu fungsi dan hanya bisa diakses hanya di dalam fungsi tersebut.
Contoh variabel global
#include<stdio.h>
int a=5, b=6; //a dan b variabel global, bisa diakses semua fungsi
int jumlah() // tanpa parameter { return a+b; // a dan b sudah diketahui krn bisa diakses
}
int main(){ printf(“%d”, jumlah());
return 0;}
Contoh variabel lokal : a, b, z
#include<stdio.h>int jumlah(int x, int y)
{
int z; //z variabel lokal karena dideklarasikan di dalam fungsi
z=x+y; // z hanya bisa diakses di dalam fungsi jumlah saja
return z;
}
int main(){ int a=5, b=6; //a dan b variabel lokal, hanya bisa diakses di main
printf(“%d”, jumlah(a, b));
return 0;}
2
Bab 9Lembar Kerja Praktikum
Nama : Tanggal Praktikum :
NRP : Waktu Praktikum :
Nilai : Nama Asisten :
Penjelasan AsistenAsisten akan menjelaskan mengenai definisi pointer. konsep dan kegunaan
pointer, hubungan pointer dan array, serta pointer sebagai argumen fungsi. Jika masih ada waktu asisten menjelaskan kembali tentang fungsi.
Lembar Kerja Bagian I (45 menit)Tuliskan program-program berikut, simpan nama file sesuai dengan nama yang
sudah ditentukan pada folder, kemudian jawablah pertanyaan singkat terkait dengan program tersebut pada tempat yang telah disediakan. Gambarkan alokasi memori dan perubahan masing-masing variabel pada kotak di sebelah kanan program.
Program 1 Program 1Nama Program: pointer1.c Perubahan variabel#include <stdio.h>int main() x{
yint x = 3, y = 4;int *z;
zz = &x;y = *z;x = 10;*z = 3;printf(“x = %d, y = %d”,x, y);return 0;}
Apakah output yang dicetak program di atas? Statement apa yang harus ditambahkan agar program dapat mencetak isi dari variabel z dan mencetak isi memori yang ditunjuknya?Jawab:________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
3
Program 2 Program 2Nama Program: pointer2.c Perubahan variabel#include <stdio.h>int main(){ xint a=4, b=10, *x, *y;
yx = &b;*x = 20; ay = x;
bx = &a;*x = a;b = *x / 2 * 4 + *y;printf("a = %d, b = %d, *x = %d,*y = %d\n",a,b,*x,*y);return 0;}
Apakah output program? Jika pada program di atas sebelum printf ditambahkan statement a=x+y, apa yang terjadi?Jawab:________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
Program 3 Program 3Nama Program: pointer3.c Hasil trace#include <stdio.h>main() {int i;int a[5]={10,20,30,40,50};int *b=&a[1];for (i=0; i<3; i++) {
printf("%d ", b[0]);b++;}
return 0;}
Apa output program tersebut? Tuliskan proses untuk mendapatkan output tersebut pada kotak di sebelah kanan program.Jawab:________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
4
________________________________________________________________________
Program 4Nama Program: pointer4.c#include <stdio.h>int what(int *a, int b)
{ int t=*a; *a=b; b=t; return (*a+b);
}main() {
int a=5, b=10, c;printf("%d %d %d\n", a, b, what(&a,b)); return 0;
}
Apa yang dilakukan program di atas, dan apakah outputnya? Jawab:________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
Program 5Nama Program: pointer5.c#include <stdio.h> #define SIZE 5 main() {chara[][SIZE]={{'a','y','o'},{'t','e','b','a','k'},{'h','u','r','u','f'}}; char *p = &a[0][0];
char *q = a[2]; char *r = a[1];
printf("%c",*(r + SIZE)); printf("%c", *(p + SIZE + 1) ); printf("%c", p[2 * SIZE + 2]); printf("%c", p[2 * SIZE + 1] ); printf("%c", *(q - (SIZE + 3)) ); printf("%c", *r );
printf("%c", *r ); printf("%c", *(r - 3)); return 0;}
Apakah output dari program di atas? Dari program di atas, dapatkah Anda menyebutkan beberapa cara dalam mengakses elemen array?Jawab:________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
5
________________________________________________________________________________________________________________________________________________Lembar Kerja Bagian II (45 menit)Buatlah program sesuai dengan instruksi yang diberikan simpan nama file sesuai dengan yang tertera pada soal di dalam folder NRP Anda.
Tugas 10Nama Program: tugas10.cBuatlah sebuah program untuk mencari berapa jumlah bilangan (dari n bilangan) yang nilainya di atas rata-rata n bilangan tersebut. Gunakan array untuk melakukan penyimpanan dan pointer untuk mengakses array tersebut
6