Konsep Scope pada Pemrograman C

Hloww...

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 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