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

Hạn chế của mảng (array) trong ngôn ngữ C

Các hạn chế

  • Đồng nhất (homogeneous): Chỉ lưu một kiểu dữ liệu. Mảng int chỉ chứa int, mảng float chỉ chứa float.
  • Kích thước cố định: Phải khai báo kích thước hằng số tại compile-time. Dễ gây thừa hoặc thiếu bộ nhớ.
  • Phải dịch chuyển (shift) khi chèn/xóa phần tử giữa mảng.
  • Không kiểm tra giới hạn: C không kiểm tra truy xuất vượt kích thước mảng.
  • Dữ liệu tràn sẽ ghi đè vùng nhớ liền kề (biến khác, code chương trình) → hành vi không xác định, treo chương trình, không báo lỗi.

Ví dụ nguy hiểm:

int a[10], i;
for (i = 0; i <= 20; i++)
    a[i] = i; // ghi vượt giới hạn!

Ví dụ: Cộng hai mảng

#include <stdio.h>

void main() {
    int array1[5], array2[5], sum[5], i;

    printf("Nhap mang 1:\n");
    for (i = 0; i < 5; i++) {
        printf("array1[%d]: ", i);
        scanf("%d", &array1[i]);
    }
    printf("Nhap mang 2:\n");
    for (i = 0; i < 5; i++) {
        printf("array2[%d]: ", i);
        scanf("%d", &array2[i]);
    }

    printf("Tong hai mang:\n");
    for (i = 0; i < 5; i++) {
        sum[i] = array1[i] + array2[i];
        printf("%d ", sum[i]);
    }
}

Kết quả

Nhap mang 1: 2 3 1 2 3
Nhap mang 2: 4 5 3 2 1
Tong hai mang: 6 8 4 4 4