Panduan Pemula Mengenai Array Panjang Variabel di C

Hai sana, para pemrogram masa depan! Hari ini, kita akan memulai perjalanan menarik ke dunia Array Panjang Variabel (VLA) di C. Jangan khawatir jika Anda baru dalam pemrograman - saya akan menjadi panduan ramah Anda, menjelaskan segala sesuatunya langkah demi langkah. Mari kita masuk ke dalamnya!

C - Variable Length Arrays

Apa Itu Array Panjang Variabel?

Sebelum kita mulai, mari kita pahami apa itu Array Panjang Variabel. Bayangkan Anda merencanakan sebuah pesta, tetapi Anda tidak yakin berapa banyak tamu yang akan datang. Apakah tidak bagus jika Anda bisa menyiapkan sebuah meja yang dapat secara magis mengatur ukurannya berdasarkan jumlah tamu? Itu tepat apa yang dilakukan VLA dalam pemrograman!

Sebuah Array Panjang Variabel adalah array yang ukurannya ditentukan pada saat runtime (ketika program sedang berjalan) bukan pada saat compile-time (ketika program sedang disiapkan untuk berjalan). Fitur ini diperkenalkan dalam standar C99 dan memberikan fleksibilitas lebih besar dalam pembuatan array.

Membuat Array Panjang Variabel

mari kita mulai dengan contoh sederhana untuk membuat VLA:

#include <stdio.h>

int main() {
int n;
printf("Berapa banyak nomor yang ingin Anda simpan? ");
scanf("%d", &n);

int numbers[n];  // Ini adalah Array Panjang Variabel kita

printf("Masukkan %d nomor:\n", n);
for (int i = 0; i < n; i++) {
scanf("%d", &numbers[i]);
}

printf("Anda memasukkan: ");
for (int i = 0; i < n; i++) {
printf("%d ", numbers[i]);
}

return 0;
}

mari kitauraikan ini:

  1. Kita meminta pengguna untuk menginputkan berapa banyak nomor yang mereka ingin simpan.
  2. Kita membuat array numbers dengan ukuran n yang diinputkan pengguna.
  3. Kita menggunakan loop untuk menginputkan n nomor dari pengguna.
  4. Akhirnya, kita mencetak semua nomor yang pengguna masukkan.

Ini adalah keindahan VLA - kita tidak perlu tahu ukuran array saat menulis kode. Ukuran ditentukan saat program berjalan!

Array Panjang Variabel Dua Dimensi

Sekarang, mari kita naik tingkat dan lihat array VLA dua dimensi. Bayangkan Anda membuat seating chart untuk sebuah pernikahan, tetapi Anda tidak tahu berapa banyak meja atau berapa banyak kursi di setiap meja. Array VLA dua dimensi dapat membantu!

Ini contohnya:

#include <stdio.h>

int main() {
int tables, seats;

printf("Berapa banyak meja? ");
scanf("%d", &tables);

printf("Berapa banyak kursi per meja? ");
scanf("%d", &seats);

int seating[tables][seats];  // Array 2D Panjang Variabel kita

// Mengassign nomor kursi
for (int i = 0; i < tables; i++) {
for (int j = 0; j < seats; j++) {
seating[i][j] = i * seats + j + 1;
}
}

// Mencetak seating arrangement
printf("\nSeating Arrangement:\n");
for (int i = 0; i < tables; i++) {
printf("Meja %d: ", i + 1);
for (int j = 0; j < seats; j++) {
printf("%3d ", seating[i][j]);
}
printf("\n");
}

return 0;
}

Dalam contoh ini:

  1. Kita meminta pengguna untuk menginputkan jumlah meja dan kursi per meja.
  2. Kita membuat array 2D VLA seating dengan dimensi [tables][seats].
  3. Kita mengassign nomor kursi ke setiap posisi.
  4. Akhirnya, kita mencetak seating arrangement.

Fleksibilitas ini memungkinkan kita untuk membuat seating chart dalam ukuran apa pun, ditentukan pada saat runtime!

Array Jagged

Sekarang, mari kita lihat hal yang benar-benar menarik. Apa jika setiap meja di pernikahan kita memiliki jumlah kursi yang berbeda? Masukkan array jagged - array dari array dimana setiap sub-array dapat memiliki panjang yang berbeda.

Meskipun C tidak mendukung array jagged secara langsung seperti beberapa bahasa lain, kita dapat mensimulasikannya menggunakan VLA dan pointer. Ini adalah cara:

#include <stdio.h>
#include <stdlib.h>

int main() {
int tables;
printf("Berapa banyak meja? ");
scanf("%d", &tables);

int *seats = malloc(tables * sizeof(int));
int **seating = malloc(tables * sizeof(int*));

// Menginputkan jumlah kursi untuk setiap meja
for (int i = 0; i < tables; i++) {
printf("Berapa banyak kursi di meja %d? ", i + 1);
scanf("%d", &seats[i]);
seating[i] = malloc(seats[i] * sizeof(int));
}

// Mengassign nomor kursi
for (int i = 0; i < tables; i++) {
for (int j = 0; j < seats[i]; j++) {
seating[i][j] = j + 1;
}
}

// Mencetak seating arrangement
printf("\nSeating Arrangement:\n");
for (int i = 0; i < tables; i++) {
printf("Meja %d: ", i + 1);
for (int j = 0; j < seats[i]; j++) {
printf("%3d ", seating[i][j]);
}
printf("\n");
}

// Merelease memori yang dialokasikan
for (int i = 0; i < tables; i++) {
free(seating[i]);
}
free(seating);
free(seats);

return 0;
}

Contoh ini lebih kompleks, mari kitauraikan:

  1. Kita membuat array seats untuk menyimpan jumlah kursi untuk setiap meja.
  2. Kita membuat pointer-to-pointer seating untuk mensimulasikan array jagged.
  3. Kita alokasi memori secara dinamis untuk setiap meja berdasarkan jumlah kursinya.
  4. Kita mengassign nomor kursi dan mencetak seating arrangement seperti sebelumnya.
  5. Akhirnya, kita merelease memori yang dialokasikan untuk mencegah kebocoran memori.

Pendekatan ini memungkinkan kita untuk memiliki jumlah kursi yang berbeda untuk setiap meja - benar-benar fleksibel!

Tabel Metode

Ini adalah tabel referensi cepat metode yang kita gunakan dalam contoh kita:

Metode Deskripsi Contoh
scanf() Membaca input format dari pengguna scanf("%d", &n);
printf() Mencetak output format ke konsol printf("Hello, %s!", name);
malloc() Mengalokasikan memori secara dinamik int *arr = malloc(n * sizeof(int));
free() Merelease memori yang dialokasikan free(arr);

Ingat, dengan kekuatan yang besar datang tanggung jawab yang besar. VLAs dan alokasi memori dinamik adalah alat yang kuat, tetapi mereka perlu digunakan dengan hati-hati untuk menghindari masalah seperti stack overflow atau kebocoran memori.

Dan itu saja! Anda telah mengambil langkah pertama ke dunia Array Panjang Variabel di C. Ingat, latihan membuat sempurna, jadi jangan khawatir untuk mencoba konsep ini. Selamat coding!

Credits: Image by storyset