Disini kita akan mempelajari tentang Scope. Sesuai katanya, Scope berarti ruang lingkup.
Scope terbagi jadi dua, global dan local.
Langsung saja ke contoh.
#include <stdio.h> int glb = 5; void tambah() { int x = glb + 5; printf("x = %d\n", x); } int main() { tambah(); return 0; }
Compile & run, maka outputnya akan begini.
Deskripsi:
Program tersebut memiliki sebuah variabel global glb dan sebuah variabel lokal x. Variabel glb bersifat global karena 1. Tidak berada di dalam main atau sub-program, 2. Variabel tersebut dapat diakses pada sub-program manapun, contohnya dapat dipakai untuk ditampilkan pada sub-program tambah(). Sedangkan x bersifat lokal karena hanya dapat diakses pada sub-program tambah() dan tidak dapat diakses pada sub-program yang lain, jika "memaksa" ingin menampilkan nilai x pada main() seperti ini.int main() { tambah(); printf("nilai x = %d", x); return 0; }
maka program tersebut akan error: 'x' undeclared (first use in this function).
Lalu, gimana caranya kita "bermain" dengan konsep Scope ini? Caranya adalah dengan menggunakan pointer. Perhatikan kode berikut.
#include <stdio.h> void tukar(int x, int y) { int temp = x; x = y; y = temp; } int main() { int a = 5; int b = 7; printf("a = %d\n", a); printf("b = %d\n", b); tukar(a, b); printf("..Setelah penukaran..\n"); printf("a = %d\n", a); printf("b = %d\n", b); }
Program tersebut menukarkan angka pada variabel a dan b, tapi penukaran tidak terjadi, karena fungsi penukaran hanya bersifat lokal pada sub-program tukar().
Tapi, jika kodenya kita ubah sedikit tanpa menggunakan sub-program seperti ini.
#include <stdio.h> int main() { int a = 5; int b = 7; printf("a = %d\n", a); printf("b = %d\n", b); int temp = a; a = b; b = temp; printf("..Setelah penukaran..\n"); printf("a = %d\n", a); printf("b = %d\n", b); }
maka penukaran pun terjadi.
Supaya kita dapat membuat fungsi penukaran yang dapat digunakan pada fungsi yang lain(dalam kasus ini main()), maka kita dapat menggunakan pointer seperti ini.
#include <stdio.h> void tukar(int* x, int* y) { int temp = *x; *x = *y; *y = temp; } int main() { int a = 5; int b = 7; printf("a = %d\n", a); printf("b = %d\n", b); tukar(&a, &b); printf("..Setelah penukaran..\n"); printf("a = %d\n", a); printf("b = %d\n", b); }
Magic happens! penukaran pun terjadi.
Itu dapat terjadi karena kita bukan menaruh nilai variabel a dan b pada parameter fungsi tukar(), tapi kita menaruh alamat memori variabel a dan b. Lalu nilai pada alamat memori a dan b tersebut akan di-load pada main().
Here is our conclusion in picture!
Post a Comment