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.


menginginkan


Membuat Variabel-variabel Program

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

  • Tidak boleh mengandung:
    • kata kunci bahasa C apa pun (contohnya: volatile)
    • operator-operator aritmatika (contohnya: a+b*c)
    • karakter-karakter tanda baca (contohnya: %$#@!)
    • spasi atau tanda pisah (contohnya: tidak ada spasi).
  • Tidak boleh diawali dengan sebuah angka (contohnya: 2buruk).
  • Boleh mengandung:
    • angka-angka di posisi lainnya (contohnya: bagus1)
    • campuran jenis huruf kapital atau huruf kecil (contohnya: ATASBawah)
    • karakter garis bawah (contohnya: itu_ok).

Sebuah praktek 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 bertujuan untuk menentukan jenis atau tipe data variabel yang diijinkan untuk ditampung. Itu akan 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.

Pecahan 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 varAngka_1 , varAngka_2 ;

/* mendeklarasikan sebuah variabel karakter */
char varHuruf ;
 
/* mendeklarasikan dan menginisialisasi sebuah variabel titik-kambang */
float varBilanganDesimal = 7.5 ; 

/* menginisialisasi variabel bilangan bulat */
varAngka_1 = 100 ; 
varAngka_2 = 200 ;

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

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() yang berkurung 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 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, yang 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 dapat juga 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.

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

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

    printf( "Bilangan bulat adalah %d \n", varAngka ) ;
    printf( "Nilai %d dan %f \n", num, varPi ) ;
    printf( "%%7d menampilkan %7d \n", varAngka ) ;
    printf( "%%07d menampilkan %07d \n", varAngka ) ;
    printf( "Pi mendekati %1.10f \n", varPi ) ;
    printf( "Rata kanan %20.3f pembulatan pi \n", varPi ) ;
    printf( "Rata kiri %-20.3f pembulatan pi \n", varPi ) ;
    
  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.

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() mensyaratkan dua argumen dalam tanda kurungnya untuk menspesifikasikan tipe data sebagai masukan dan lokasi tempat masukan seharusnya disimpan.

Argumen pertama pada fungsi scanf() harus salah satu dari penentu-format dari tabel daftar sebelumnya. Sebagai contoh, “%d” yang 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 & dapat juga 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.

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

    int main()
    {
        char varHuruf ;
        int varAngka_1, varAngka_2 ;
    }
    
  3. Dalam fungsi main(), setelah deklarasi variabel, masukkan pernyataan untuk mendapatkan masukan dari pengguna.

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

    printf( "Angka masukan: %d dan %d \n", varAngka1, varAngka2 ) ;
    printf( "Huruf masukan: %c", varHuruf ) ;
    printf( " disimpan di: %p \n", &varHuruf ) ;
    
  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.

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” ataupun “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 menurun hingga sebuah 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 varAngka_1 ; /* menghemat ruang memori */
long int varAngka_2 ; /* mengijinkan 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 konstan yang disebut sebagai INT_MAX dan INT_MIN untuk deklarasi variabel int dengan ukuran yang tidak ditentukan. Secara sama, 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 yang positif “tak bertanda” dapat dideklarasikan menggunakan kata-kunci penggolong unsigned saat variabel tersebut tidak pernah akan diberikan nilai negatif. Sebuah variabel unsigned short int umumnya memiliki rentang nilai dari 0 hingga 65.535 namun hanya mendiami ruang memori yang sama sebagai 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 banyak memori sedapat mungkin yang terkecil merupakan bentuk praktek 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 dengan sebuah instruksi prapemroses untuk mengikutsertakan fungsi-fungsi masukan/keluaran standar dan konstanta-konstanta.

    #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... \tsize: %d bytes \t", sizeof( short int) ) ;
        printf( "%d to %d \n", SHRT_MAX, SHRT_MIN ) ;
    }
    
  3. Selanjutnya, masukkan pernyataan-pernyataan untuk mengeluarkan ukuran dan rentang tipe data long int.

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

    printf( "char... \tsize: %d byte \n", sizeof( char ) ) ;
    printf( "float... \tsize: %d bytes \n", sizeof( float ) ) ;
    printf( "double... \tsize: %d 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.

Menggunakan Variabel-variabel Global

Jangkauan variabel-variabel 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 lain sisi, 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 bersama-sama 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 mengijinkan 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

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

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

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

    extern int varExtAngka ;
    printf( "Angkanya adalah %d \n", varExtAngka );
    
  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.

    int varAngka = 200 ;
    
  7. Kompilasilah kedua berkas menjadi sebuah program yang dapat dieksekusi, dengan mengikutsertakan masing-masing nama berkas kode sumber dalam perintah, kemudian eksekusi program untuk melihat keluaran nilai global.

Mendaftarkan Variabel-variabel

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 lain sisi, apabila sebuah variabel global digunakan untuk menyimpan nilai kontrol sebuah perulangan dan bisa juga diubah dari luar perulangan, variabel global tersebut mendapat keuntungan dalam menjadi sebuah variabel volatile.

Struktur perulangan secara penuh akan dijelaskan pada artikel bagian lima 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.

    #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 varAngka = 0 ;
    }
    
  3. Selanjutnya masukan sebuah uji kondisional untuk melihat apabila nilai kontrol kurang dari lima, diikuti dengan sepasang kurung kurawal.

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

    ++varAngka ;
    printf( "Melewati %d \n", varAngka ) ;
    
  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.

Mengkonversi 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 pengubah-pengubah (modifiers), seperti misalnya unsigned. Sintaks sebuah cast seperti berikut ini:

nama-variabel-2 = ( pengubah-pengubah 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 varAngka = 5.75 di-cast ke sebuah bilangan bulat melalui (int) varAngka 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 vHuruf = 'A' maka apabila di-cast menjadi sebuah bilangan bulat melalui (int) vHuruf menghasilkan bilangan bulat 65. Melakukan casting nilai bilangan bulat dalam rentang tersebut menjadi sebuah tipe data char yang memberikan huruf yang bersesuaian.

Sering kita perlu melakukan casting nilai bilangan bulat menjadi nilai bilangan titik-kambangnya 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 varAngkaDesimal = 0.1234569 yang di-cast menjadi sebuah float melalui (float) varAngkaDesimal akan memberikan nilai 0.123457.

  1. Mulailah sebuah program baru dengan sebuah instruksi prapemroses untuk mengikutsertakan fungsi-fungsi dalam pustaka masukan/keluaran standar.

  2. Tambahkan sebuah fungsi main() yang mendeklarasikan dan menginisialisasi variabel-variabel dengan beragam tipe data.

    int main() 
    {
        float varAngka = 5.75 ;
        char varHuruf = 'A' ;
        int varBilangaBulat = 90 ;
        int x = 7 , y = 5 ;
        double varBilanganDesimal = 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) varAngka ) ;
    printf( "Char di-cast menjadi int: %d \n" , (int) varHuruf ) ;
    printf( "Int di-cast menjadi char: %c \n" , (char) varBilangaBulat ) ;
    printf( "Aritmetika float: %f \n" , (float) x / (float) y ) ;
    printf( "Double di-cast menjadi float: %f \n" , (float) vBilanganDesimal ) ;
    
  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.

Membuat Variabel-variabel Larik

Sebuah variabel larik dapat menyimpan beragam 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]

GAMBAR

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 berdimensi-banyak 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 mengijinkan Anda untuk menyimpan koordinat XYZ.

GAMBAR

Indeks-indeks tambahan mengijinkan dibuatnya larik dengan banyak matra, namun dalam kenyataan larik bermatra-banyak dengan lebih dari tiga indeks adalah tidak biasa dijumpai karena sulit untuk dibayangkan secara visual.

  1. Mulailah sebuah program baru dengan sebuah instruksi prapemroses untuk mengikutsertakan fungsi-fungsi dalam pustaka masukan/keluaran standar.

  2. Tambahkan sebuah fungsi main() yang mendeklarasikan dan menginisialisasi sebuah larik bermatra-dua.

    int main()
    {
        int varLarikMatrik[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" , varLarikMatrik[0][0]) ;
    printf( "Anggota [0][1] berisi %c \n" , varLarikMatrik[0][1] ) ;
    printf( "Anggota [0][2] berisi %c \n" , varLarikMatrik[0][2] ) ;
    
  4. Sekarang masukkan pernyataan-pernyataan untuk menampilkan semua isi anggota dalam indeks kedua.

    printf( "Anggota [1][0] berisi %d \n" , varLarikMatrik[1][0] ) ;
    printf( "Anggota [1][1] berisi %d \n" , varLarikMatrik[1][1]) ;
    printf( "Anggota [1][2] berisi %d \n" , varLarikMatrik[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.

    GAMBAR

Ringkasan

  • Sebuah variabel merupakan sebuah wadah dalam sebuah program C tempat sebuah nilai data 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 diijinkan 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-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.
FacebooktwitterredditpinterestlinkedinmailFacebooktwitterredditpinterestlinkedinmail