Didalam membuat sebuah fungsi, dibutuhkan suatu parameter yang digunakan sebagai data masukan yang akan diolah didalam tubuh fungsi.
Didalam pendefinisiannya, parameter fungsi dibagi menjadi dua macam, yaitu:
- Parameter Formal
- Parameter Aktual
Parameter Formal merupakan parameter yang berada didalam definisi fungsi.
Sedangkan parameter Aktual merupakan parameter/argumen pada saat pemanggilan fungsi dan letaknya berada didalam fungsi main()
.
Sebetulnya, tedapat perbedaan antara Argumen dengan Parameter.
Argumen merupakan data/nilai yang akan dikirimkan kedalam fungsi tujuan, dan terdapat didalam fungsi main()
.
Sedangkan parameter merupakan nilai atau data yang telah dikirimkan tadi, dan akan diproses didalam tubuh fungsi.
Berdasarkan cara pengiriman nilai parameternya, parameter dikirim melalui dua metode berikut
- Pass by Value
- Pass by Reference
1. Pass by Value
Metode pass by value ini sudah sering kita gunakan sebelumnya pada materi konsep dasar fungsi.
Pass by Value merupakan metode pengiriman nilai parameter berdasarkan nilai/value-nya.
Jadi, ketika kita mengirimkan parameter aktual dari fungsi main()
, maka didalam parameter formal akan mencopy paste nilainya tadi.
Perhatikan kode berikut.
#include <stdio.h>
int tampil(int, int); int tampil(int a, int b){ printf("Nilai a = %d, nilai b = %d", a, b); } int main(){ int x = 3; int y = 5; tampil(x, y); return 0; }
Dari program diatas, kita mengirimkan dua argumen x
dan y
dari fungsi main()
kepada fungsi tampil()
.
Didalam fungsi tampil()
, kita buat program untuk menampilkan nilai/value dari dari argumen yang dikirim tadi.
Akan menghasilkan output.
Perhatikan lagi program berikut.
#include <stdio.h>
void tukar(int, int); void tukar(int a, int b){ int z; z= a; a= b; b= z; printf("x = %d, y = %d", a, b); } int main(){ int x = 3; int y = 5; printf("Nilai variabel didalam fungsi main(),\n x = %d, y = %d\n", x, y); printf("Nilai variabel didalam fungsi tukar()\n", ); tukar(x, y) printf("Nilai variabel setelah pemanggilan fungsi tukar(),\n x = %d, y = %d\n", x, y); return 0; }
Awal mula, nilai x = 3
dan y = 5
.
Lalu, didalam fungsi tukar()
kita buat program untuk menukar nilai dari kedua variabel tersebut.
Terlihat bahwa setelah dipanggil fungsi tukar()
, variabel x
dan y
didalam fungsi main()
tidak menunjukkan adanya perubahan nilai.
Hal ini terjadi karena parameter a
dan b
didalam fungsi tukar()
hanya menyalin nilai dari x
dan y
saja.
Ketika fungsi tukar()
sudah selesai memproses programnya, maka hasilnya akan berhenti sampai disitu saja.
Sehingga tidak akan berpengaruh didalam fungsi main()
.
Berbeda halnya jika menggunakan metode pengiriman parameter menggunakan metode pass by reference.
2. Pass by Reference
Pass by Reference merupakan metode pengiriman parameter berdasarkan referensi atau alamatnya.
Kita sedikit ulas kembali apa itu alamat.
Alamat merupakan kode unik didalam memori (RAM) yang yang didalamnya memuat suatu data.
Kode unik tersebut berfungsi sebagai pengidentifikasi/pembeda antara satu data dengan data lain yang ada didalam memori.
Jadi, tiap kali kita mendeklarasikan atau menginisialisasikan variabel, maka variabel tersebut secara otomatis tersimpan didalam sebuah alamat.
Dengan kita menggunakan metode pass by refence, nilai variabel yang termuat didalamnya akan bernilai tetap dan tidak akan berubah-ubah.
Hal ini terjadi karena, jika kita mengirimkan alamat kesana kemari, maka data yang ada didalamnya akan mengikuti kemanapun alamat tersebut pergi.
Perhatikan program berikut.
#include <stdio.h>
void tukar(int*, int* ); void tukar(int* a, int* b){ int z; z= * a;* a= * b;* b= z; printf(" x = %d, y = %d",* a,* b); } int main(){ int x = 3; int y = 5; printf("Nilai variabel didalam fungsi main(),\n x = %d, y = %d\n", x, y); printf("Nilai variabel didalam fungsi tukar()\n", ); tukar(&x, &y) printf("Nilai variabel setelah pemanggilan fungsi tukar(),\n x = %d, y = %d\n", x, y); return 0; }
Program sama seperti sebelumnya yaitu menukar nilai variabel.
Didalam metode pass by reference ini, argumen didalam parameter aktual kita berikan simbol &
(ampersand) / simbol alamat.
Yang berarti bahwa yang kita kirimkan merupakan alamat dari variabel x
dan alamat dari var y
.
Lalu, didalam parameter formal terdapat simbol *
(asterik) / simbol pointer.
Simbol pointer ini digunakan untuk menunjuk alamat dari suatu variabel.
*a
menunjuk &x
(Pointer a menujuk alamat dari variabel x), sedangkan *b
menunjuk &y
.
Maka akan menghasilkan output
Terlihat bahwa setelah pemanggilan fungsi tukar()
, nilai varibel x
dan y
didalam fungsi main()
ikut tertukar.
Penggolongan Variabel didalam Fungsi
Pada materi variabel dan tipe data, kita telah belajar mengenai pengelompokan variabel berdasarkan tipe datanya.
Pada materi kali ini, kita akan mempelajari pengelompokan variabel berdasarkan kelas penyimpanannya (class storage).
Ada empat jenis varibel berdasarkan kelas penyimpanannya, yaitu:
- variabel lokal
- variabel eksternal
- variabel statis
- variabel register
1. Variabel Lokal (auto)
Variabel lokal merupakan variabel yang dideklarasikan didalam sebuah fungsi.
Variabel lokal memiliki karakteristik sebagai berikut.
- Secara otomatis diciptakan ketika fungsi dipanggil dan akan sirna (lenyap) ketika eksekusi terhadap fungsi berakhir.
- Hanya dikenal oleh fungsi tempat variabel tersebut dideklarasikan
Variabel-variabel yang sudah sering kita gunakan pada program-program sebelumnya merupakan variabel lokal.
#include <stdio.h>
void function(){ int x; // Variabel lokal int y = 4; } int main(){ char nama[] = "Ambis"; // Variabel lokal int b = 5; ... return 0; }
2. Variabel Eksternal (global)
Variabel eksternal merupakan varibel yang dideklarasikan diluar fungsi.
Variabel Eksternal memiliki karakteristik sebagai berikut.
- Dapat diakses oleh semua fungsi
- Jika pada saat pendeklarasian tidak diberi nilai, maka secara default akan bernilai nol.
Variabel eksternal ini dapat kita gunakan disemua fungsi, dengan menambahkan kata kunci extern
didepan tipe variabelnya, tetapi hal ini bersifat opsional.
#include <stdio.h>
int n = 5; // Pendefinisian variabel global void global();
void global(){ int jumlah; jumlah= n+ n; printf("n + n = %d", jumlah); } int main(){ extern int n; printf("Nilai variabel n = %d\n", n); printf("Variabel n x 7 = %d\n", n*7); global(); return 0; }
Jika terdapat nama variabel yang sama antara variabel global dan lokal, maka program akan memakai variabel lokal.
3. Variabel Statis
Variabel statis merupakan variabel yang nilainya tetap, meskipun pemanggilannya berada pada tempat yang berbeda.
Variabel statis memiliki karakteristik sebagai berikut
- Kalau variabel statis bersifat internal, maka variabel hanya dikenal oleh fungsi tempat variabel dideklarasikan
- Kalau variabel statis bersifat eksternal, maka variabel dapat dipergunakan oleh semua fungsi yang terletak pada file yang sama, tempat variabel statis dideklarasikan
- Berbeda dengan variabel lokal, variabel statis tidak akan hilang sekeluarnya dari fungsi (nilai pada variabel akan tetap diingat).
- Inisialisasi akan dilakukan hanya sekali, yaitu saat fungsi dipanggil yang pertama kali. Kalau tak ada inisialisasi oleh pemrogram secara otomatis akan diberi nilai awal nol.
Program dengan menggunakan var statis
#include <stdio.h>
void statis();
void statis(){ static int x = 0; // Pendefinisian var static x++; printf("Nilai x = %d\n", x); } int main(){ statis(); statis(); statis(); return 0; }
Program tanpa var statis.
#include <stdio.h>
void statis();
void statis(){ int x = 0; x++; printf("Nilai x = %d\n", x); } int main(){ statis(); statis(); statis(); return 0; }
4. Variabel Register
Variabel register merupakan variabel yang nilainya disimpan didalam register, bukan didalam memori.
Register merupakan sejumlah kecil memori komputer yang bekerja dengan kecepatan sangat tinggi yang digunakan untuk melakukan eksekusi terhadap program-program komputer dengan menyediakan akses yang cepat terhadap nilai-nilai yang umum digunakan[1].
Variabel Register memiliki karakteristik sebagai berikut.
- Variabel register hanya bisa diterapkan pada variabel yang lokal atau parameter formal, dengan tipe
char
atauint
. - Variabel register biasa diterapkan pada variabel yang digunakan sebagai pengendali loop.
- Tujuannya untuk mempercepat proses dalam loop, sebab variabel yang dioperasikan pada register memiliki kecepatan yang jauh lebih tinggi daripada variabel yang diletakkan pada RAM
Variabel register ini biasa digunakan untuk operasi dalam jumlah yang besar
#include <stdio.h>
int main(){ register int i; // Pendefinisian var register int jumlah = 0; for(i=0; i<=1000000; i++){ jumlah= jumlah+ i; } printf("Hasil penjumlahan looping 1 s.d 1.000.000 = %d", jumlah); return 0; }
Post a Comment
Post a Comment