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:

text
tipe nama_array[ukuran];
  • tipe adalah tipe data setiap elemen (misal int, char, double).
  • nama_array adalah identifier yang dipakai untuk merujuk array.
  • ukuran adalah 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.

c
#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:

text
Umur siswa pertama: 21
Kode matkul ke-2: B
Suhu ketiga: 36.8

Mari kita telaah baris-baris kode di atas:

  1. Baris 4 (int umur[5];): deklarasi array umur bertipe int dengan 5 elemen. Karena tidak ada initializer, isi elemen tidak terdefinisi—kita wajib mengisinya sebelum membaca.
  2. Baris 5-9 (umur[0] = 21; dst.): pengisian elemen satu per satu melalui assignment. Ekspresi umur[i] = x menulis nilai x ke alamat elemen ke-i.
  3. Baris 12 (#define JUMLAH_MATKUL 4): mendefinisikan konstanta simbolik. Preprocessor akan menggantikan setiap token JUMLAH_MATKUL dengan 4 sebelum compiler melihat kode.
  4. Baris 13 (char kode_matkul[JUMLAH_MATKUL] = {'A', 'B', 'C', 'D'};): deklarasi char array berukuran JUMLAH_MATKUL (4) sekaligus inisialisasi. Penggunaan konstanta simbolik membuat ukuran mudah diubah: cukup satu titik perubahan di #define.
  5. Baris 16 (float suhu[3] = {...}): deklarasi array float dengan initializer. Suffix f pada literal 36.5f diperlukan karena literal 36.5 tanpa suffix berbertipe double, bukan float.
  6. Baris 18-20 (printf(...)): mengakses elemen indeks 0, 1, dan 2 dengan format specifier yang sesuai (%d untuk int, %c untuk char, %.1f untuk 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.

c
#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:

text
Rata-rata: 81.67
1 2 3
4 5 6

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