Mảng kích thước biến đổi (Variable Length Array - VLA) là cấu trúc dữ liệu có độ dài xác định tại runtime thay vì compile-time. Chúng hữu ích cho lập trình thuật toán số. Chuẩn C99 cho phép VLA.
Ví dụ
#include <stdio.h>
#include <stdlib.h>
int main() {
int n;
printf("Nhap kich thuoc mang: ");
scanf("%d", &n);
int arr[n]; // VLA: kích thước quyết định tại runtime
for (int i = 0; i < n; i++)
arr[i] = i + 1;
printf("Cac phan tu mang: ");
for (int i = 0; i < n; i++)
printf("%d ", arr[i]);
return 0;
}
Kết quả
Nhap kich thuoc mang: 10
Cac phan tu mang: 1 2 3 4 5 6 7 8 9 10
Giải thích: Mảng arr[n] có kích thước do người dùng nhập tại runtime. Các phần tử được khởi tạo qua vòng lặp for rồi in ra.
Lưu ý quan trọng:
- VLA chỉ hỗ trợ trong C99, không có trong C++ chuẩn (một số compiler cho phép như extension).
- VLA cấp phát trên stack – kích thước lớn dễ gây stack overflow.
- Không thể khởi tạo tại khai báo:
int arr[n] = {1,2,3};là sai cú pháp. - C11 làm VLA trở thành optional (macro
__STDC_NO_VLA__). - Ưu tiên dùng
malloc/freehoặcstd::vector(C++) cho mảng động an toàn hơn.