Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Khởi tạo mảng kích thước biến đổi (VLA) trong C

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/free hoặc std::vector (C++) cho mảng động an toàn hơn.