Array Panjang Variabel dalam C: Panduan untuk Pemula

Halo sana, para pemrogram masa depan! Hari ini, kita akan melangkah ke dalam dunia Array Panjang Variabel (VLA) dalam C. Jangan khawatir jika Anda masih baru dalam pemrograman - saya akan menjadi panduan yang ramah, menjelaskan segala sesuatunya secara langkah demi langkah. mari kita masuk ke dalamnya!

C - Variable Length Arrays

Apa itu Array Panjang Variabel?

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

Sebuah Array Panjang Variabel adalah sebuah array yang ukurannya ditentukan saat runtime (ketika program sedang berjalan) bukan 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 kami

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 mereka ingin simpan.
  2. Kita membuat array numbers dengan ukuran n yang pengguna inputkan.
  3. Kita kemudian menggunakan loop untuk menginputkan n nomor dari pengguna.
  4. Akhirnya, kita cetak semua nomor yang pengguna masukkan.

Ini 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 pernikahan, tapi Anda tidak tahu berapa banyak meja atau berapa banyak kursi tiap meja. Array VLA dua dimensi bisa 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 kami

// 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 susunan seating
printf("\nSusunan Seating:\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 seating dengan dimensi [tables][seats].
  3. Kita assign nomor kursi ke setiap posisi.
  4. Akhirnya, kita mencetak susunan seating.

Fleksibilitas ini memungkinkan kita membuat seating chart berukuran apa pun, ditentukan saat runtime!

Array Jagged

Sekarang, mari kita lihat sesuatu yang sangat menarik. Apa bila setiap meja di pesta pernikahan kita memiliki jumlah kursi yang berbeda? Masuk ke array jagged - sebuah array dari array di mana setiap sub-array bisa memiliki panjang berbeda.

Meskipun C tidak mendukung array jagged secara langsung seperti beberapa bahasa lain, kita bisa 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*));

// Input 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));
}

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

// Print susunan seating
printf("\nSusunan Seating:\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");
}

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

return 0;
}

Contoh ini lebih kompleks, jadi mari kita uraikan:

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

Pendekatan ini memungkinkan kita 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 yang disusun dari pengguna scanf("%d", &n);
printf() Mencetak output format yang disusun ke konsol printf("Halo, %s!", name);
malloc() Mengalokasikan memory secara dinamis int *arr = malloc(n * sizeof(int));
free() Bebas memory yang dialokasikan secara dinamis free(arr);

Ingat, dengan kekuatan yang besar datang tanggung jawab yang besar. VLA dan alokasi memory dinamis adalah tools yang kuat, tapi mereka perlu digunakan dengan hati-hati untuk menghindari masalah seperti overflow stack atau kebocoran memory.

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

Credits: Image by storyset