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