Sebelum array bisa digunakan, compiler harus tahu dua hal: tipe elemen apa yang akan disimpan dan berapa banyak elemen yang tersedia. Kedua informasi ini diberikan melalui deklarasi. Tanpa deklarasi yang benar, compiler tidak dapat mengalokasikan memori yang cukup atau menentukan offset alamat tiap elemen. Pada chapter ini kita akan menelusuri sintaks deklarasi array, cara menentukan ukuran, serta beberapa kebiasaan praktis seperti memakai konstanta simbolik #define agar ukuran array mudah diubah tanpa menyentuh banyak baris kode.
Sintaks Dasar Deklarasi Array #
Bentuk umum deklarasi array satu dimensi di C adalah sebagai berikut:
tipe nama_array[ukuran];tipeadalah tipe data setiap elemen (misalint,char,double).nama_arrayadalah identifier yang dipakai untuk merujuk array.ukuranadalah jumlah elemen, harus berupa konstanta integer positif saat deklarasi array biasa (non-VLA).
Compiler mengalokasikan ruang sebesar ukuran * sizeof(tipe) byte di memori. Sebagai contoh, int arr[5] meminta 5 × 4 = 20 byte pada sistem dengan sizeof(int) == 4. Setelah deklarasi, isi elemen array bersifat tidak terdefinisi (berisi sisa data memori) sampai kita memberikan nilai secara eksplisit.
Mendeklarasikan dan Mengisi Array #
Contoh berikut mendeklarasikan tiga array berbeda (int, char, float), mengisi elemen int satu per satu, lalu mencetak nilai pertama dari masing-masing array.
#include <stdio.h>
int main(void) {
/* Deklarasi tanpa inisialisasi (isi acak) */
int umur[5];
umur[0] = 21;
umur[1] = 22;
umur[2] = 19;
umur[3] = 24;
umur[4] = 20;
/* Deklarasi dengan ukuran konstan via #define */
#define JUMLAH_MATKUL 4
char kode_matkul[JUMLAH_MATKUL] = {'A', 'B', 'C', 'D'};
/* Deklarasi array float */
float suhu[3] = {36.5f, 37.0f, 36.8f};
printf("Umur siswa pertama: %d\n", umur[0]);
printf("Kode matkul ke-2: %c\n", kode_matkul[1]);
printf("Suhu ketiga: %.1f\n", suhu[2]);
return 0;
}Output yang Dihasilkan:
Umur siswa pertama: 21
Kode matkul ke-2: B
Suhu ketiga: 36.8Mari kita telaah baris-baris kode di atas:
- Baris 4 (
int umur[5];): deklarasi arrayumurbertipeintdengan 5 elemen. Karena tidak ada initializer, isi elemen tidak terdefinisi—kita wajib mengisinya sebelum membaca. - Baris 5-9 (
umur[0] = 21;dst.): pengisian elemen satu per satu melalui assignment. Ekspresiumur[i] = xmenulis nilaixke alamat elemen ke-i. - Baris 12 (
#define JUMLAH_MATKUL 4): mendefinisikan konstanta simbolik. Preprocessor akan menggantikan setiap tokenJUMLAH_MATKULdengan4sebelum compiler melihat kode. - Baris 13 (
char kode_matkul[JUMLAH_MATKUL] = {'A', 'B', 'C', 'D'};): deklarasichararray berukuranJUMLAH_MATKUL(4) sekaligus inisialisasi. Penggunaan konstanta simbolik membuat ukuran mudah diubah: cukup satu titik perubahan di#define. - Baris 16 (
float suhu[3] = {...}): deklarasi arrayfloatdengan initializer. Suffixfpada literal36.5fdiperlukan karena literal36.5tanpa suffix berbertipedouble, bukanfloat. - Baris 18-20 (
printf(...)): mengakses elemen indeks0,1, dan2dengan format specifier yang sesuai (%duntuk int,%cuntuk char,%.1funtuk float).
Memakai Konstanta Simbolik untuk Ukuran #
Memakai angka literal seperti 5 atau 100 langsung di kode sering kali membuat program sulit dirawat. Bila kita perlu mengubah ukuran array, kita harus menyentuh banyak baris (deklarasi, loop, akses elemen). Solusinya adalah memakai konstanta simbolik melalui #define atau const int. Contoh berikut mendeklarasikan array berukuran MAKS_SISWA dan array 2D berukuran tetap.
#include <stdio.h>
#define MAKS_SISWA 3
int main(void) {
/* Deklarasi dengan konstanta simbolik */
int nilai[MAKS_SISWA];
nilai[0] = 80;
nilai[1] = 75;
nilai[2] = 90;
int total = 0;
for (int i = 0; i < MAKS_SISWA; i++) {
total += nilai[i];
}
printf("Rata-rata: %.2f\n", (double)total / MAKS_SISWA);
/* Array 2D statis untuk matriks 2x3 */
int grid[2][3];
grid[0][0] = 1; grid[0][1] = 2; grid[0][2] = 3;
grid[1][0] = 4; grid[1][1] = 5; grid[1][2] = 6;
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", grid[i][j]);
}
printf("\n");
}
return 0;
}Output yang Dihasilkan:
Rata-rata: 81.67
1 2 3
4 5 6Pada contoh di atas, konstanta MAKS_SISWA digunakan baik sebagai ukuran array maupun sebagai batas loop. Mengubah ukuran array hanya perlu mengubah satu baris #define MAKS_SISWA ke nilai baru, dan seluruh kode menyesuaikan secara otomatis. Array 2D grid memperlihatkan sintaks deklarasi dua dimensi: int grid[2][3] berarti 2 baris × 3 kolom, total 6 elemen int.