Seri Tutorial Bahasa C – Bagian 2: Menyimpan Nilai-nilai Variabel

Bagian ini menunjukkan bagaimana menyimpan, mengambil, dan memanipulasi berbagai tipe data menggunakan variabel dalam program-program C.

Catatan:

  • Silahkan Anda mengeklik icon menu     untuk berpindah subbagian.
  • Video pelengkap dalam tutorial ini akan lebih jelas dilihat dengan resolusi 720p dan mode Full screen.
2.1. Membuat Variabel-variabel Program
2.2. Menampilkan Nilai-nilai Variabel
2.3. Memasukkan Nilai-nilai Variabel
2.4. Menggolongkan Tipe-tipe Data
2.5. Menggunakan Variabel-variabel Global
2.6. Variabel-variabel Register
2.7. Melakukan Konversi Tipe-tipe Data
2.8. Membuat Variabel-variabel Larik
2.9. Menjelaskan Matra Banyak
2.10. Ringkasan

2.1. Membuat Variabel-variabel Program

Sebuah variabel merupakan suatu wadah dalam sebuah program C tempat nilai data tunggal bisa disimpan dalam memori komputer. Nilai yang disimpan dapat diacu menggunakan nama variabel. Pemrogram bisa memilih sembarang nama untuk sebuah variabel dengan mematuhi aturan penamaan yang dijabarkan sebagai berikut:

Aturan Penamaan Contoh
Tidak boleh mengandung kata kunci bahasa C apa pun. volatile
Tidak boleh mengandung operator-operator aritmatika. m+n*o
Tidak boleh mengandung karakter-karakter tanda baca. %$#@!
Tidak boleh mengandung spasi atau tanda pisah. v tinggi badan
Tidak boleh diawali dengan sebuah angka. 2karyawan
Boleh mengandung angka-angka di posisi lainnya. pemain1
Boleh mengandung campuran jenis huruf kapital atau huruf kecil. ATASBawah
Boleh mengandung karakter garis bawah. v_jumlah

Sebuah praktik yang bagus apabila dalam memilih nama variabel memperhatikan kebermaknaan untuk membuat kode program lebih mudah dimengerti. Untuk membuat sebuah variabel dalam program hanya dibutuhkan “pendeklarasian”. Sebuah deklarasi variabel memiliki sintaks berikut:

tipe-data nama-variabel ;

Deklarasi pertama, yaitu tipe-data, bertujuan untuk menentukan jenis atau tipe data variabel yang diizinkan untuk ditampung. Itu berupa satu dari empat tipe data yang akan dijelaskan pada bagian berikutnya. Tipe data diikuti dengan sebuah spasi kemudian nama variabel yang telah dipilih dengan mematuhi aturan yang telah disebutkan sebelumnya.

Seperti semua pernyataan dalam program C maka deklarasi tersebut harus diakhiri dengan tanda titik koma “;“. Variabel-variabel dengan tipe data yang sama dapat dibuat dalam sebuah deklarasi tunggal sebagai sebuah daftar yang dipisahkan dengan tanda koma seperti berikut:

tipe-data nama-variabel-1 , nama-variabel-2 , nama-variabel-3 ;

Ada empat tipe data dasar dalam bahasa C. Kesemuanya didefinisikan menggunakan kata kunci C yang dijelaskan berikut:

Tipe Data Penjelasan Contoh
char Berupa byte tunggal, dapat menyimpan hanya satu buah karakter. 'A'
int Berupa keseluruhan bilangan bulat. 100
float Berupa sebuah bilangan titik kambang (floating point) yang nilainya berlaku hingga enam posisi desimal. 0.123456
double Berupa sebuah bilangan titik kambang (floating point) yang nilainya berlaku hingga sepuluh posisi desimal. 0.0123456789

Keempat tipe data tersebut mengalokasikan banyak memori yang berbeda pada komputer dalam menyimpan data. Tipe data terkecil adalah char yang hanya mengalokasikan sebuah byte dalam memori dan paling besar adalah tipe data double yang mengalokasikan delapan bytes memori. Itu dua kali banyak memori yang dialokasikan oleh tipe data float sehingga tipe data double sebaiknya digunakan ketika membutuhkan bilangan titik kambang (floating point) yang presisi.

Deklarasi-deklarasi variabel sebaiknya dibuat sebelum kode lainnya ditulis dalam program. Ketika sebuah nilai diberikan pada sebuah variabel maka variabel tersebut dikatakan sudah “diinisialisasi”. Sebuah variabel bisa diinisialisasi ketika ia dideklarasikan.

Penggalan kode berikut mendeklarasikan dan menginisialisasi beragam variabel dengan nilai-nilai yang bersesuaian seperti yang dijelaskan dalam komentar kode — komentar-komentar penjelasan yang berada antara /* dan */ akan diabaikan oleh compiler:

/* mendeklarasikan dua variabel bilangan bulat */
int v__angka_1 , v__angka_2 ;

/* mendeklarasikan sebuah variabel karakter */
char v__huruf ;
 
/* mendeklarasikan dan menginisialisasi sebuah variabel titik kambang */
float v__bilangan_desimal = 7.5 ; 

/* menginisialisasi variabel bilangan bulat */
v__angka_1 = 100 ; 
v__angka_2 = 200 ;

/* menginisialisasi variabel karakter */
v__huruf = 'A' ; 

2.2. Menampilkan Nilai-nilai Variabel

Nilai variabel-variabel dapat ditampilkan menggunakan fungsi printf() yang digunakan pada artikel Bagian 1 untuk menampilkan pesan “Hello World“. Format yang diinginkan dalam menampilkan nilai variabel harus ditentukan sebagai sebuah argumen dalam fungsi printf() menggunakan “penentu format” yang bersesuaian:

Penentu Format Penjelasan Contoh
%d Sebuah bilangan bulat -32.768 hingga +32.767. 100
%ld Sebuah bilangan bulat bertipe long -231 hingga +231. 123456789
%f Sebuah bilangan titik kambang (floating point). 0.123456
%c Sebuah karakter tunggal. 'A'
%s Sebuah kalimat yang merupakan kumpulan karakter. "Hello World"
%p Sebuah alamat memori dalam mesin (komputer). 0x0033FF34

Sebuah penentu format memastikan bahwa keluaran menempati spasi ruang terkecil dengan menyatakan bilangan yang dibutuhkan setelah karakter %. Sebagai contoh, untuk memastikan bahwa bilangan bulat diisi paling sedikitnya tujuh spasi maka dilakukan dengan menggunakan penentu format %7d.

Apabila Anda menginginkan spasi kosong tersebut dipenuhi dengan angka nol maka tambahkan sebuah angka nol antara karakter % dan bilangan yang diinginkan. Sebagai contoh, untuk memastikan sebuah bilangan bulat selalu diisi paling sedikit tujuh spasi dan spasi kosong diisi dengan angka nol maka digunakan penentu format %07d.

Sebuah penentu format presisi, berupa sebuah tanda titik diikuti dengan sebuah angka, dapat digunakan pada penentu format %f untuk menentukan berapa banyak posisi desimal yang ditampilkan. Sebagai contoh, untuk menampilkan hanya dua posisi desimal maka penentu formatnya berupa %.2f.

Penentu presisi juga dapat digabungkan dengan penentu spasi terkecil untuk mengendalikan banyak spasi terkecil dan banyak posisi desimal yang ditampilkan. Sebagai contoh, untuk menampilkan tujuh spasi termasuk dua posisi desimal dan spasi kosong diisi dengan angka nol maka penentu formatnya berupa %07.2f.

Secara bawaan, spasi-spasi kosong mengawali bilangan sehingga tampilannya merupakan rata kanan, namun dapat ditambahkan setelah angka untuk membuatnya rata kiri dengan memberikan prefiks atau awalan tanda negatif pada penentu spasi terkecil.

  1. Awali program baru dengan sebuah instruksi pemroses awal untuk mengikutsertakan pustaka fungsi-fungsi masukan/keluaran standar. Penulis memberi nama berkas program: kode-1_bab-2.c.

    #include <stdio.h>
  2. Tambahkan sebuah fungsi main() yang mendeklarasikan dan menginisialisasi dua variabel.

    int main()
    {
        int v__angka = 200 ;
        double v__pi = 3.1415926536 ;
    }
  3. Dalam fungsi main(), setelah deklarasi variabel, masukkan pernyataan untuk keluaran nilai-nilai variabel dalam format beragam:

    printf( "%d merupakan bilangan bulat.\n" , v__angka ) ;
    printf( "%d dan %f merupakan nilai-nilai variabel.\n" , v__angka , v__pi ) ;
    printf( "%%5d menampilkan %5d.\n" , v__angka ) ;
    printf( "%%05d menampilkan %05d.\n" , v__angka ) ;
    printf( "Pendekatan nilai Pi lima angka di belakang koma: %1.5f.\n" , v__pi ) ;
    printf( "Rata kanan: %15.3f pembulatan Pi.\n" , v__pi ) ;
    printf( "Rata kiri: %-15.3f pembulatan Pi.\n" , v__pi ) ;
  4. Pada akhir fungsi main() masukkan sebuah pernyataan akhir untuk mengeluarkan nilai bilangan bulat nol seperti yang disyaratkan oleh deklarasi fungsi.

    return 0 ;
  5. Simpan berkas program kemudian pada layar perintah lakukan proses kompilasi dan eksekusi program untuk melihat nilai-nilai keluaran variabel dalam format tertentu.

Secara keseluruhan, Anda dapat melihat langkah-langkah tersebut dalam Video 2.2 (silahkan Anda pilih mode Full screen dan resolusi 720p untuk tampilan video yang lebih jelas):

Video 2.2. Menampilkan Nilai Keluaran Variabel dengan Format Tertentu dalam Bahasa C.

2.3. Memasukkan Nilai-nilai Variabel

Pustaka masukan/keluaran standar stdio.h menyediakan sebuah fungsi scanf() yang digunakan untuk mendapatkan masukan pengguna ke dalam sebuah program. Fungsi scanf() membutuhkan dua argumen dalam tanda kurungnya untuk menentukan tipe data apa sebagai masukannya dan lokasi tempat masukan tersebut disimpan.

Argumen pertama pada fungsi scanf() harus salah satu dari penentu format dari tabel daftar sebelumnya. Sebagai contoh, untuk “%d” maka masukannya berupa nilai bilangan bulat. Argumen kedua fungsi scanf() harus merupakan sebuah variabel diawali dengan karakter &, kecuali ketika data masukan merupakan sebuah teks kalimat.

Karakter & memiliki beberapa penggunaan dalam pemrograman C namun dalam konteks ini merupakan operator “alamat dari”, yang maknanya bahwa data masukan seharusnya disimpan di lokasi memori yang telah diperuntukkan bagi variabel tersebut.

Ketika sebuah variabel dideklarasikan maka sebuah ruang dipesan dalam memori komputer untuk menyimpan data yang diberikan pada variabel tersebut. Banyaknya byte yang dipesan bergantung pada tipe data variabel. Memori yang teralokasi diacukan dengan sebuah nama variabel unik.

Memori komputer dapat dibayangkan sebagai sebuah barisan kotak yang sangat panjang. Masing-masing kotak memiliki sebuah alamat unik yang diungkapkan dalam format heksadesimal. Itu seperti sebuah jalan perumahan yang panjang — setiap rumah berisi orang dan memiliki sebuah nomor yang unik. Dalam program C, rumah-rumah tersebut merupakan kotak-kotak dan orang-orang merupakan isi data dalam alamat tersebut.

Fungsi scanf() dapat secara bersamaan menerima nilai-nilai banyak variabel. Argumen pertamanya harus berisi sederetan penentu format, masing-masing dipisahkan dengan sebuah spasi, dan daftar tersebut dikurung dengan tanda petik ganda. Argumen kedua harus berisi sederetan nama variabel yang masing-masing dipisahkan dengan tanda koma dan diawali dengan operator alamat &.

Operator alamat “&” juga dapat digunakan untuk mengeluarkan alamat memori heksadesimal tempat data variabel disimpan. Dengan menggabungkan keluaran dari fungsi printf() dan masukan dari fungsi scanf() maka akan menciptakan interaktivitas dasar antara pengguna dan program.

  1. Mulailah sebuah program dengan sebuah instruksi pra-pemroses untuk mengikutsertakan pustaka fungsi-fungsi masukan/keluaran standar. Penulis memberi nama berkas program: kode-2_bab-2.c.

    #include <stdio.h>
  2. Tambahkan sebuah fungsi main() yang mendeklarasikan tiga variabel.

    int main()
    {
        char v__huruf ;
        int v__angka_1 , v__angka_2 ;
    }
  3. Dalam fungsi main(), setelah deklarasi variabel, masukkan pernyataan untuk mendapatkan masukan dari pengguna.

    printf( "Masukkan sembarang karakter keyboard: " ) ;
    scanf( "%c" , &v__huruf ) ;
    printf( "Masukkan dua bilangan bulat yang dipisahkan oleh sebuah spasi: " ) ;
    scanf( "%d %d" , &v__angka_1 , &v__angka_2 ) ;
  4. Selanjutnya masukkan pernyataan untuk mengeluarkan detail data yang disimpan.

    printf( "Angka masukan: %d dan %d \n" , v__angka_1 , v__angka_2 ) ;
    printf( "Huruf masukan: %c" , v__huruf ) ;
    printf( " disimpan di: %p \n" , &v__huruf ) ;
  5. Pada akhir fungsi main() masukkan sebuah pernyataan terakhir untuk mengeluarkan sebuah nilai bilangan bulat nol, seperti yang disyaratkan oleh deklarasi fungsi.

    return 0 ;
  6. Simpan berkas program, kompilasi dan eksekusi program, masukkan data ketika diminta kemudian lihat data tersimpan yang dikeluarkan.

Secara keseluruhan, Anda dapat melihat langkah-langkah tersebut dalam Video 2.3 (silahkan Anda pilih mode Full screen dan resolusi 720p untuk tampilan video yang lebih jelas):

Video 2.3. Menerima dan Menampilkan Masukan Data Secara Interaktif dalam Bahasa C.

2.4. Menggolongkan Tipe-tipe Data

Saat sebuah variabel bilangan bulat berupa tipe data int dibuat maka ia secara bawaan mengandung baik nilai positif atau juga negatif. Itu disebut sebagai nilai “bertanda” (signed). Rentang nilai-nilai yang mungkin ditentukan oleh sistem Anda baik itu sebagai “long” atau pun “short“.

Jika variabel int dibuat secara bawaan sebagai sebuah tipe long maka ia memiliki sebuah kemungkinan rentang nilai dari nilai terbesar +2.147.483.647 dan nilai terkecil -2.147.483.648.

Di sisi lain, bila variabel int dibuat secara bawaan sebagai sebuah tipe short maka rentang nilainya berada antara +32.767 hingga -32.768.

Ukuran rentang dapat ditentukan secara eksplisit menggunakan kata kunci penggolong short dan long dalam deklarasi variabel, seperti berikut:

short int v__angka_1 ; /* menghemat ruang memori */
long int v__angka_2 ; /* mengizinkan rentang yang lebih besar */

limits.h yang merupakan berkas pustaka header C berisi implementasi yang jelas terkait batas ukuran setiap tipe data. Itu dapat diakses melalui nilai tetapan yang disebut sebagai INT_MAX dan INT_MIN untuk deklarasi variabel int dengan ukuran yang tidak ditentukan. Demikian pula, SHRT_MAX dan SHRT_MIN berisi batasan untuk deklarasi variabel short int, dan LONG_MAX dan LONG_MIN berisi batasan untuk deklarasi variabel long int.

Sebuah variabel int positif “tak bertanda” dapat dideklarasikan menggunakan kata kunci penggolong unsigned apabila variabel tersebut tidak akan pernah disematkan nilai negatif. Sebuah variabel unsigned short int umumnya memiliki rentang nilai dari 0 hingga 65.535 dan mendiami ruang memori yang sama besarnya seperti sebuah variabel short int biasa.

Selanjutnya, sebuah variabel unsigned long int memiliki rentang nilai dari 0 hingga 4.294.967.295 dan mendiami besar ruang memori yang sama seperti layaknya sebuah variabel long int biasa.

Operator sizeof dalam C bisa digunakan untuk mengungkap banyak ruang memori yang dipesan oleh variabel-variabel yang memiliki tipe data berbeda. Penggunaan besar memori sedapat mungkin yang terkecil merupakan bentuk praktik pemrograman yang baik.

Sebagai contoh, ketika sebuah variabel hanya akan mengandung nilai bilangan bulat positif di bawah 65.535 maka lebih disarankan untuk menggunakan sebuah variabel unsigned short int yang hanya memesan 2 byte memori dibandingkan sebuah variabel long int yang memesan 4 byte memori.

  1. Mulailah sebuah program baru dengan sebuah instruksi prapemroses untuk mengikutsertakan fungsi-fungsi masukan/keluaran standar dan konstanta-konstanta. Penulis memberi nama berkas program: kode-3_bab-2.c.

    #include <stdio.h>
    #include <limits.h>
    
  2. Tambahkan sebuah fungsi utama yang mengandung pernyataan-pernyataan untuk mengeluarkan ukuran dan rentang tipe data short int.

    int main()
    {
        printf( "short int... \tukuran: %zu bytes \t" , sizeof( short int ) ) ;
        printf( "%d hingga %d \n" , SHRT_MAX , SHRT_MIN ) ;
    }
    
  3. Selanjutnya, masukkan pernyataan-pernyataan untuk mengeluarkan ukuran dan rentang tipe data long int.

    printf( "long int... \tukuran: %zu bytes \t" , sizeof( long int ) ) ;
    printf( "%ld hingga %ld \n" , LONG_MAX , LONG_MIN ) ;
    
  4. Sekarang masukkan pernyataan-pernyataan untuk mengeluarkan ukuran data lain.

    printf( "char... \tukuran: %zu byte \n" , sizeof( char ) ) ;
    printf( "float... \tukuran: %zu bytes \n" , sizeof( float ) ) ;
    printf( "double... \tukuran: %zu bytes \n" , sizeof( double ) ) ;
    
  5. Masukkan sebuah pernyataan akhir untuk mengeluarkan sebuah nilai bilangan bulat nol seperti yang disyaratkan oleh deklarasi fungsi.

    return 0 ;
    
  6. Simpan berkas program, kemudian lakukan kompilasi dan eksekusi program untuk melihat ukuran dan rentang tipe data.

Secara keseluruhan, Anda dapat melihat langkah-langkah tersebut dalam Video 2.4 (silahkan Anda pilih mode Full screen dan resolusi 720p untuk tampilan video yang lebih jelas):

Video 2.4. Melihat Ukuran dan Rentang Nilai Tipe Data dalam Bahasa C.

2.5. Menggunakan Variabel-variabel Global

Jangkauan variabel-variabel yang dapat diakses dalam sebuah program disebut sebagai “cakupan variabel”. Variabel-variabel yang dideklarasikan dalam sebuah fungsi dikenal sebagai variabel-variabel “lokal”, sedangkan variabel-variabel yang dideklarasikan di luar fungsi dikenal sebagai variabel-variabel “global”.

Variabel-variabel lokal hanya dapat diakses dari dalam fungsi tempat mereka dideklarasikan. Itu merupakan perilaku implisit bawaan yang dapat ditentukan secara eksplisit dalam deklarasi variabel dengan kata kunci auto yang jarang digunakan. Mereka hadir ketika sebuah fungsi dipanggil, dan akan lenyap ketika fungsi berakhir.

Variabel-variabel global, di sisi lain, dapat diakses dari dalam fungsi mana pun dalam program. Mereka hadir ketika program dieksekusi dan tetap ada hingga program berakhir.

Sebuah variabel global eksternal harus didefinisikan tepat saat program dimulai dan itu hanya sekali saja. Ia juga harus dideklarasikan pada awal setiap fungsi yang butuh untuk mengaksesnya. Deklarasinya diawali dengan kata kunci extern untuk menandakan bahwa ia mengacu pada sebuah variabel eksternal, alih-alih sebagai sebuah deklarasi variabel lokal biasa. Deklarasi tersebut sebaiknya tidak digunakan untuk menginisialisasi variabel global.

Program-program C yang berukuran besar sering terdiri dari banyak berkas kode sumber yang dikompilasi bersamaan untuk membuat sebuah berkas yang dapat dieksekusi. Variabel-variabel global dapat diakses dari sembarang fungsi dalam sembarang berkas yang sedang dikompilasi bersama. Semua fungsi juga dapat diakses secara global. Namun fungsi-fungsi dan variabel-variabel global bisa memiliki akses yang terbatas hanya pada berkas tertentu tempat mereka dibuat dengan menggunakan kata kunci static dalam deklarasinya.

Sebuah program tidak dapat memiliki banyak variabel dengan nama yang sama namun hal tersebut bisa dilakukan jika masing-masingnya dideklarasikan sebagai sebuah variabel static dan bersifat unik dalam sebuah berkas kode sumber. Pemrograman dengan banyak berkas kode sumber dapat mengungkap adanya duplikat sebuah nama variabel global dalam dua berkas yang berbeda. Mendeklarasikan variabel tersebut sebagai static dapat menghindari untuk mengganti nama salah satu variabel tersebut di dalam setiap kemunculannya dalam kode sumber.

Variabel-variabel lokal internal juga bisa dideklarasikan sebagai static. Mereka hanya dapat diakses dari dalam fungsi tempat mereka dideklarasikan, seperti biasa, namun mereka tidak akan lenyap ketika fungsi berakhir. Hal tersebut mengizinkan penyimpanan privat secara permanen dalam sebuah fungsi sampai program diakhiri.

  1. Mulailah sebuah program baru dengan sebuah instruksi prapemroses untuk mengikutsertakan fungsi-fungsi pustaka masukan/keluaran standar. Penulis memberi nama berkas program: kode-4-1_bab-2.c.

    #include <stdio.h>
  2. Definisikan dan inisialisasikan sebuah variabel statis global yang hanya boleh diakses dari dalam berkas kode sumber saat ini.

    static int v__ext_jumlahan = 50 ;
  3. Tambahkan sebuah fungsi main() yang mendeklarasikan bahwa ia akan menggunakan variabel statis global dan juga nilai keluarannya.

    int main()
    {
        extern int v__ext_jumlahan ;
        printf( "Jumlahannya adalah %d \n" , v__ext_jumlahan ) ;
    }
  4. Sekarang masukkan sebuah deklarasi untuk menggunakan sebuah variabel global yang kedua dan mengeluarkan nilainya.

    extern int v__ext_angka ;
    printf( "Angkanya adalah %d \n" , v__ext_angka );
  5. Masukkan sebuah pernyataan akhir untuk mengeluarkan sebuah bilangan bulat nol seperti yang disyaratkan oleh deklarasi fungsi kemudian simpanlah berkasnya.

    return 0 ;
  6. Dalam sebuah berkas lain, definisikan sebuah variabel global kedua kemudian simpanlah berkasnya. Penulis memberi nama berkas program: kode-4-2_bab-2.c.

    int v__ext_angka = 100 ;
  7. Kompilasilah kedua berkas (kode-4-1_bab-2.c dan kode-4-2_bab-2.c) menjadi sebuah program yang dapat dieksekusi, dengan mengikutsertakan masing-masing nama berkas kode sumber dalam perintah, kemudian eksekusi program untuk melihat keluaran nilai global.

Secara keseluruhan, Anda dapat melihat langkah-langkah tersebut dalam Video 2.5 (silahkan Anda pilih mode Full screen dan resolusi 720p untuk tampilan video yang lebih jelas):

Video 2.5. Menggunakan Variabel-variabel Global dalam Bahasa C.

2.6. Variabel-variabel Register

Sebuah deklarasi variabel yang mengikutsertakan kata kunci register memberitahukan kepada compiler bahwa variabel tersebut akan sering digunakan oleh program. Tujuannya adalah agar compiler menempatkan variabel-variabel register di dalam register-register mesin untuk mempercepat waktu akses. Kebergunaannya boleh jadi dipertanyakan karena compiler bebas untuk mengabaikan saran tersebut.

Hanya variabel-variabel lokal internal yang bisa dideklarasikan sebagai variabel-variabel register. Dalam kasus sembarang hanya sedikit variabel yang bisa ditampung dalam register-register mesin dan mereka juga berupa variabel tipe tertentu. Batasan-batasan tepatnya beragam untuk mesin yang berbeda.

Terlepas dari kelemahan tersebut, deklarasi-deklarasi register tidaklah berbahaya karena kata kunci register diabaikan ketika compiler tidak bisa menggunakan register-register mesin untuk menyimpan variabel. Sebaliknya variabel dibuat seolah-olah kata kunci register tidak ada di sana.

Lawan sepenuhnya sebuah variabel register yaitu sebuah deklarasi variabel yang mengikutsertakan kata kunci volatile. Itu maknanya bahwa variabel tidak harus disimpan di register sebuah mesin karena nilainya kemungkinan berubah setiap waktu. Hal itu khususnya relevan untuk variabel-variabel global dalam program-program besar yang boleh jadi secara bersamaan diubah oleh banyak threads.

Jenis variabel yang mungkin mendapat keuntungan dengan menjadi sebuah variabel register adalah sebuah variabel lokal yang digunakan untuk menyimpan nilai kontrol sebuah perulangan. Pada setiap iterasi perulangan nilai tersebut harus dibandingkan dan diubah sehingga variabel secara berulang diakses. Menyimpan nilai tersebut di dalam sebuah register mesin dapat mempercepat eksekusi perulangan.

Pada sisi lain, apabila sebuah variabel global digunakan untuk menyimpan nilai kontrol sebuah perulangan dan bisa juga diubah dari luar perulangan, variabel global tersebut mendapat keuntungan dengan menjadi sebuah variabel volatile.

Struktur perulangan secara penuh akan dijelaskan pada Artikel Bagian 5 namun contoh berikut diikutsertakan untuk menggambarkan akses berulang sebuah variabel register.

  1. Mulailah sebuah program baru dengan sebuah instruksi prapemroses untuk mengikutsertakan fungsi-fungsi dalam pustaka masukan/keluaran. Penulis memberi nama berkas program: kode-5_bab-2.c.

    #include <stdio.h>
  2. Tambahkan sebuah fungsi main() yang menyatakan dan menginisialisasi sebuah variabel register lokal yang berisi sebuah nilai kontrol perulangan yaitu nol.

    int main()
    {
        register int v__angka = 0 ;
    }
  3. Selanjutnya masukan sebuah uji kondisional untuk melihat apabila nilai kontrol kurang dari lima, diikuti dengan sepasang kurung kurawal.

    while ( v__angka < 5 )
    {                   	}
  4. Di antara kurung kurawal struktur perulangan masukkan pernyataan untuk menambah nilai kontrol dan mengeluarkan nilai terkini pada setiap iterasi perulangan.

    ++v__angka ;
    printf( "Melewati %d \n" , v__angka ) ;
  5. Pada akhir blok fungsi keluarkan sebuah bilangan bulat bernilai nol seperti yang disyaratkan oleh deklarasi fungsi.

    return 0 ;
  6. Simpanlah berkas program kemudian lakukan kompilasi dan eksekusi program untuk melihat nilai yang diperoleh dari variabel register pada setiap iterasi perulangan.

Secara keseluruhan, Anda dapat melihat langkah-langkah tersebut dalam Video 2.6 (silahkan Anda pilih mode Full screen dan resolusi 720p untuk tampilan video yang lebih jelas):

Video 2.6. Menggunakan Variabel-variabel Register dalam Bahasa C.

2.7. Melakukan Konversi Tipe-tipe Data

Compiler secara implisit akan mengubah sebuah tipe data menjadi tipe data lainnya apabila dianggap logis untuk dilakukan. Sebagai contoh, saat sebuah nilai bilangan bulat (integer) disematkan ke sebuah variabel float maka compiler mengubah nilai bilangan bulat tersebut menjadi sebuah bilangan titik kambang (floating point).

Data apa saja yang disimpan ke dalam sebuah variabel dapat secara eksplisit dipaksa menjadi sebuah variabel yang berbeda tipe datanya melalui sebuah proses yang dikenal sebagai “casting“. Sebuah cast hanya menyatakan tipe data apa untuk sebuah variabel yang seharusnya diubah dan itu dinyatakan di dalam sebuah tanda kurung sebelum nama variabel. Isi kurung tersebut juga mengikutsertakan penerang-penerang (modifiers), seperti misalnya unsigned. Sintaks sebuah cast seperti berikut ini:

 nama-variabel-2 = ( penerang tipe-data ) nama-variabel-1 ;

Sebagai catatan, casting tidak mengubah tipe data orisinal variabel namun hanya menyalin nilainya sebagai sebuah tipe data yang berbeda.

Saat terjadi casting dari variabel float ke int maka nilainya akan dipotong (truncate) di titik desimal. Tidak ada pembulatan ke bilangan bulat terdekat. Sebagai contoh, float v__angka = 5.75 di-cast ke sebuah bilangan bulat melalui (int) v__angka menghasilkan bilangan bulat 5, bukan 6.

Ketika melakukan casting dari sebuah variabel char ke sebuah variabel int maka nilai bilangan bulat yang dihasilkan berupa nilai kode numerik ASCII yang mewakili karakter tersebut. Huruf kapital memiliki nilai ASCII dalam rentang: 65 - 90, sedangkan huruf kecil berada dalam rentang: 97 - 122.

Sebagai contoh untuk char v__huruf = 'A' maka apabila di-cast menjadi sebuah bilangan bulat melalui (int) v__huruf menghasilkan bilangan bulat 65. Melakukan casting nilai bilangan bulat dalam rentang tersebut menjadi sebuah tipe data char akan memberikan huruf yang bersesuaian.

Sering kita perlu melakukan casting nilai bilangan bulat menjadi nilai bilangan titik kambangnya (floating point) yang ekuivalen untuk mendapatkan aritmatika yang presisi atau akurat. Pembagian dapat menghasilkan keluaran bilangan bulat yang terpotong. Sebagai contoh, untuk int x = 7, y = 5 maka pernyataan float z = x / y akan memberikan nilai 1.000000. Arimatika yang presisi mensyaratkan agar pernyataan tersebut menggunakan cast berupa (float) x / (float) y yang menghasilkan nilai bilangan titik kambang 1.400000.

Melakukan casting bilangan presisi titik kambang yang panjang dari sebuah tipe data double menjadi tipe data float yang lebih pendek tidak serta merta memotong nilai yang lebih panjang ke posisi enam desimal namun justru akan membulatkannya ke atas atau ke bawah untuk nilai yang terdekat. Sebagai contoh, untuk double v__angka_desimal = 0.1234569 yang di-cast menjadi sebuah float melalui (float) v__angka_Desimal akan memberikan nilai 0.123457.

  1. Mulailah sebuah program baru dengan sebuah instruksi prapemroses untuk mengikutsertakan fungsi-fungsi dalam pustaka masukan/keluaran standar. Penulis memberi nama berkas program: kode-6_bab-2.c.

    #include <stdio.h>
  2. Tambahkan sebuah fungsi main() yang mendeklarasikan dan menginisialisasi variabel-variabel dengan beragam tipe data.

    int main() 
    {
        float v__angka = 5.75 ;
        char v__huruf = 'A' ;
        int v__bilangan_bulat = 90 ;
        int x = 7 , y = 5 ;
        double v__bilangan_desimal = 0.1234569 ;
    } 
  3. Selanjutnya masukkan pernyataan untuk mengeluarkan nilai masing-masing variabel berdasarkan cast yang bersesuaian.

    printf( "Float di-cast menjadi int: %d \n" , ( int ) v__angka ) ;
    printf( "Char di-cast menjadi int: %d \n" , ( int ) v__huruf ) ;
    printf( "Int di-cast menjadi char: %c \n" , ( char ) v__bilangan_bulat ) ;
    printf( "Aritmetika float: %f \n" , ( float ) x / ( float ) y ) ;
    printf( "Double di-cast menjadi float: %f \n" , ( float ) v__bilangan_desimal ) ;
  4. Pada akhir blok fungsi keluarkan sebuah nilai bilangan bulat nol seperti yang disyaratkan oleh deklarasi fungsi.

    return 0 ;
  5. Simpan berkas program kemudian lakukan kompilasi dan eksekusi program untuk melihat hasil-hasil yang ekuivalen dari masing-masing cast.

Secara keseluruhan, Anda dapat melihat langkah-langkah tersebut dalam Video 2.7 (silahkan Anda pilih mode Full screen dan resolusi 720p untuk tampilan video yang lebih jelas):

Video 2.7. Mengkonversi Tipe-tipe Data dalam Bahasa C.

2.8. Membuat Variabel-variabel Larik

Sebuah variabel larik dapat menyimpan banyak satuan data, tidak seperti sebuah variabel biasa yang hanya bisa menyimpan satu satuan data.

Satuan-satuan data tersebut disimpan secara berurutan dalam “anggota-anggota” larik yang dinomori mulai dari nol. Jadi, nilai larik pertama disimpan di dalam anggota larik nol, nilai larik kedua disimpan di dalam anggota larik satu, dan demikian seterusnya.

Sebuah variabel larik dideklarasikan dalam sebuah program C dengan cara yang sama seperti mendeklarasikan variabel-variabel biasa namun tambahannya yaitu ukuran larik (banyak anggota) ditentukan dalam deklarasinya. Itu dinyatakan di dalam kurung siku setelah nama larik, sintaksnya sebagai berikut:

tipe-data nama-larik[banyak-anggota]

  1. Mulailah sebuah program baru dengan sebuah instruksi prapemroses untuk mengikutsertakan fungsi-fungsi dalam pustaka masukan/keluaran standar. Penulis memberi nama berkas program: kode-7_bab-2.c.

    #include <stdio.h>
  2. Tambahkan sebuah fungsi main() yang mendeklarasikan sebuah larik bilangan bulat dengan tiga anggota.

    int main() 
    {
        int v__larik_bilangan_bulat[3] ;
    } 
  3. Selanjutnya masukkan pernyataan untuk menginisialisasi anggota larik bilangan bulat dengan menyematkan nilai pada masing-masing anggota.

    v__larik_bilangan_bulat[0] = 10 ;
    v__larik_bilangan_bulat[1] = 20 ;
    v__larik_bilangan_bulat[2] = 30 ;
  4. Setelah itu, masukkan sebuah pernyataan untuk membuat dan menginisialisasi sebuah larik karakter untuk menyimpan sebuah untaian karakter.

    char v__larik_untaian_kata[10] = {'P', 'r', 'o', 'g', 'r', 'a', 'm', ' ', 'C', '\0' }
  5. Masukkan pernyataan-pernyataan untuk mengeluarkan semua nilai anggota larik integer dan untaian karakter dari larik karakter.

    printf( "Nilai anggota ke-1: %d \n" , v__larik_bilangan_bulat[0] ) ;
    printf( "Nilai anggota ke-2: %d \n" , v__larik_bilangan_bulat[1] ) ;
    printf( "Nilai anggota ke-3: %d \n" , v__larik_bilangan_bulat[2] ) ;
    printf( "Untaian karakter: %s \n" , v__larik_untaian_kata ) ;
  6. Pada akhir blok fungsi keluarkan sebuah nilai bilangan bulat nol seperti yang dibutuhkan oleh deklarasi fungsi.

    return 0 ;
  7. Simpan berkas program kemudian lakukan kompilasi dan eksekusi program untuk melihat nilai-nilai yang tersimpan dalam variabel-variabel larik.

Secara keseluruhan, Anda dapat melihat langkah-langkah tersebut dalam Video 2.8 (silahkan Anda pilih mode Full screen dan resolusi 720p untuk tampilan video yang lebih jelas):

Video 2.8. Membuat Variabel-variabel Larik dalam Bahasa C.

2.9. Menjelaskan Matra Banyak

Penomoran anggota-anggota larik lebih tepat disebut sebagai “indeks larik” dan karena penomoran anggotanya dimulai dari nol maka sering dikenal sebagai sebuah “indeks berbasis-nol”. Sebuah larik berindeks tunggal merupakan sebuah larik bermatra satu atau satu dimensi (1D) yang anggota-anggotanya berupa sebuah baris tunggal:

Isi anggota:  A   B   C   D   E
Nomor indeks: [0] [1] [2] [3] [4]

Larik-larik bisa juga memiliki banyak indeks untuk mewakili dimensi-dimensi banyak. Sebuah larik yang dibuat dengan dua indeks merupakan sebuah larik bermatra dua atau dua dimensi (2D) yang anggota-anggotanya muncul dalam beberapa baris:

Indeks pertama: [0]  A   B   C   D   E
[1]  F   G   H   I   J
Indeks kedua:     [0] [1] [2] [3] [4]

Melalui larik-larik multimatra maka nilai-nilai yang dikandung dalam setiap anggota diacukan dengan menyatakan nomor setiap indeks. Sebagai contoh, untuk larik bermatra dua di atas maka anggota di [1][2] berisi huruf H.

Larik-larik bermatra dua begitu berguna untuk menyimpan informasi berbasis jala-jala seperti koordinat XY. Sedangkan bila membuat sebuah larik bermatra tiga dengan tiga indeks maka mengizinkan Anda untuk menyimpan koordinat XYZ.

Gambar 2.8. Koordinat XYZ dalam Aplikasi K-3D.
Gambar 2.8. Koordinat XYZ dalam Aplikasi K-3D.

Indeks-indeks tambahan mengizinkan dibuatnya larik dengan matra yang lebih banyak. Namun dalam kenyataannya, larik bermatra banyak dengan lebih dari tiga indeks tidak biasa dijumpai karena ia sulit untuk dibayangkan secara visual.

  1. Mulailah sebuah program baru dengan sebuah instruksi prapemroses untuk mengikutsertakan fungsi-fungsi dalam pustaka masukan/keluaran standar. Penulis memberi nama berkas program: kode-8_bab-2.c.

    #include <stdio.h>
  2. Tambahkan sebuah fungsi main() yang mendeklarasikan dan menginisialisasi sebuah larik bermatra dua.

    int main()
    {
        int v__larik_matrik[2][3] = { { 'A', 'B', 'C' } , { 1, 2, 3 } } ;
    }
  3. Selanjutnya masukkan pernyataan-pernyataan untuk menampilkan semua isi anggota dalam indeks pertama.

    printf( "Anggota [0][0] berisi %c \n" , v__larik_matrik[0][0]) ;
    printf( "Anggota [0][1] berisi %c \n" , v__larik_matrik[0][1] ) ;
    printf( "Anggota [0][2] berisi %c \n" , v__larik_matrik[0][2] ) ;
  4. Sekarang masukkan pernyataan-pernyataan untuk menampilkan semua isi anggota dalam indeks kedua.

    printf( "Anggota [1][0] berisi %d \n" , v__larik_matrik[1][0] ) ;
    printf( "Anggota [1][1] berisi %d \n" , v__larik_matrik[1][1]) ;
    printf( "Anggota [1][2] berisi %d \n" , v__larik_matrik[1][2] ) ;
  5. Pada akhir blok fungsi keluarkan sebuah bilangan bulat bernilai nol seperti yang disyaratkan dalam deklarasi fungsi.

    return 0 ;
  6. Simpan berkas program kemudian lakukan proses kompilasi dan eksekusi program untuk melihat semua nilai yang disimpan dalam anggota-anggota larik bermatra dua.

Secara keseluruhan, Anda dapat melihat langkah-langkah tersebut dalam Video 2.9 (silahkan Anda pilih mode Full screen dan resolusi 720p untuk tampilan video yang lebih jelas):

Video 2.9. Membuat Data Multi Dimensi Menggunakan Larik dalam Bahasa C.

2.10. Ringkasan

  • Sebuah variabel merupakan suatu wadah dalam sebuah program C tempat nilai data tunggal disimpan di dalam memori komputer.
  • Nama-nama variabel harus mengikuti konvensi penamaan bahasa C.
  • Empat tipe data dasar dalam bahasa C antara lain char, int, float, dan double.
  • Penentu format %d, %f, %c, %s, dan %p bisa digunakan dengan fungsi printf() untuk menampilkan nilai-nilai variabel dengan tipe data yang berbeda.
  • Masukan dari pengguna dapat disematkan ke sebuah variabel menggunakan fungsi scanf().
  • Rentang nilai yang diizinkan untuk variabel int dapat secara eksplisit ditentukan dengan menggunakan kata kunci short dan long.
  • Variabel-variabel yang tidak pernah bernilai negatif bisa digolongkan sebagai unsigned untuk memperlebar rentang positif mereka.
  • Banyaknya bytes memori yang dialokasikan untuk variabel apa saja bisa diungkap dengan menggunakan operator sizeof().
  • Cakupan variabel menjelaskan jangkauan aksesibilitas untuk sebuah variabel dan itu bisa lokal maupun global.
  • Kata kunci extern menentukan sebuah variabel yang terdefinisi secara eksternal dan kata kunci static membatasi aksesibilitas hanya sebatas berkas kode sumber yang sama.
  • Kinerja variabel-variabel yang sering digunakan dapat ditingkatkan menggunakan kata kunci register untuk menempatkan variabel tersebut di sebuah register mesin.
  • Variabel-variabel yang tidak cocok untuk register dapat ditandai sebagai volatile.
  • Compiler secara implisit dapat mengganti tipe data yang logis untuk diganti, atau bisa diganti secara eksplisit melalui casting.
  • Variabel-variabel larik menyimpan banyak data satuan dalam anggota tersendiri yang diberi nomor secara berurut, dimulai dari nol.
  • Nilai-nilai di dalam anggota larik diacukan dengan nama variabel larik yang diikuti dengan nomor anggota mereka yang ditulis di dalam kurung siku.
  • Variabel-variabel larik dapat memiliki banyak indeks untuk membuat larik bermatra banyak.

Daftar Pustaka

  1. Kernighan, Brian W. & Ritchie, Dennis M. (1988). The C Programming Language. New Jersey: Prentice Hall.
  2. Griffiths, David & Griffiths, Dawn (2012). Head First C. California: O’Reilly.
  3. McGarth, Mike (2012). C Programming: Grasp the Nuts and Bolts of Programming. Warwickshire: In Easy Steps Ltd.
  4. Stevanovic, Milan (2014). Advanced C and C++ Compiling: An Engineering Guide to Compiling, Linking, and Libraries using C and C++. California: Apress.

Tinggalkan Balasan

Situs ini menggunakan Akismet untuk mengurangi spam. Pelajari bagaimana data komentar Anda diproses.