1. Giới thiệu
Khởi tạo mảng trong ngôn ngữ C là một bước cơ bản nhưng rất quan trọng trong lập trình. Nếu không khởi tạo đúng cách, có thể dẫn đến các lỗi hoặc bug không mong muốn. Bài viết này sẽ giải thích chi tiết từng bước về cách khởi tạo mảng, dành cho người mới bắt đầu đến trung cấp, đồng thời cung cấp các mẹo hữu ích thực tế. Nhờ vậy, bạn sẽ tiến gần hơn đến việc trở thành chuyên gia về khởi tạo mảng!
2. Mảng là gì? Vai trò của mảng trong C
Mảng là cấu trúc giúp xử lý nhiều giá trị cùng kiểu dữ liệu một cách tiện lợi. Ví dụ, khi lưu điểm thi của 30 người, thay vì tạo 30 biến riêng lẻ, bạn có thể gom chúng vào một mảng duy nhất – cách này hiệu quả hơn nhiều.
Ví dụ: Khai báo mảng
int scores[30];
Dòng lệnh này sẽ tạo một mảng đủ chỗ cho điểm số của 30 người.
Một điểm cần chú ý là mảng chưa được khởi tạo có thể chứa dữ liệu không xác định. Vì vậy, việc khởi tạo đúng là vô cùng cần thiết.

3. Cách khởi tạo mảng cơ bản
Bạn có thể khởi tạo mảng ngay khi khai báo. Việc này giúp thiết lập sẵn dữ liệu cần thiết khi chương trình bắt đầu chạy.
Ví dụ 1: Khai báo và khởi tạo cùng lúc
int arr[3] = {1, 2, 3};
Dòng này khai báo một mảng arr
gồm 3 phần tử và gán giá trị cho từng phần tử. Trong C, đôi khi bạn không cần chỉ rõ kích thước mảng – trình biên dịch có thể tự xác định dựa vào số phần tử trong danh sách khởi tạo.
Ví dụ 2: Khởi tạo không ghi kích thước
int arr[] = {1, 2, 3};
Kích thước mảng sẽ tự động được xác định dựa trên số giá trị khởi tạo.
Mẹo nhỏ:
Việc ghi rõ kích thước mảng đôi khi hữu ích, nhưng nếu bỏ qua thì mã nguồn sẽ đơn giản và dễ đọc hơn.
4. Khởi tạo một phần mảng
Khi bạn chỉ khởi tạo một phần mảng, các phần tử còn lại sẽ tự động được gán giá trị 0. Điều này rất tiện khi bạn chỉ muốn đặt giá trị cho một số phần tử nhất định.
Ví dụ: Khởi tạo một phần
int arr[5] = {1, 2}; // Các phần tử còn lại sẽ tự động thành 0
Ở đây, hai phần tử đầu được gán giá trị 1
và 2
, các phần tử còn lại là 0
. Kiểu khởi tạo này hữu ích khi xử lý mảng lớn hoặc chỉ cần thiết lập giá trị cho một phần mảng.

5. Khởi tạo toàn bộ bằng 0
Nếu muốn khởi tạo tất cả phần tử về 0, bạn có thể viết ngắn gọn như sau:
Ví dụ: Khởi tạo tất cả bằng 0
int arr[5] = {0}; // Mọi phần tử đều là 0
Cách này rất tiện khi cần “reset” mảng lớn về giá trị 0. Ngoài ra, với mảng nhiều phần tử, có thể sử dụng hàm memset
để khởi tạo nhanh.
Ví dụ: Dùng memset
để khởi tạo về 0
memset(arr, 0, sizeof(arr));
Sử dụng memset
giúp khởi tạo mảng lớn nhanh chóng và hiệu quả.
6. Khởi tạo mảng nhiều chiều
Trong C, bạn cũng dễ dàng xử lý mảng 2 chiều, 3 chiều… Rất hữu ích khi thao tác với ma trận hoặc dữ liệu phức tạp.
Ví dụ: Khởi tạo mảng 2 chiều
int arr[2][3] = {
{1, 2, 3},
{4, 5, 6}
};
Mảng 2 hàng 3 cột này sẽ được gán giá trị cho từng hàng ngay khi khai báo.
Ví dụ: Khởi tạo mảng 3 chiều
int tensor[2][2][2] = {
{{1, 2}, {3, 4}},
{{5, 6}, {7, 8}}
};
Mảng 3 chiều 2x2x2 này sẽ được khởi tạo giá trị từng phần tử. Khi dùng mảng nhiều chiều, bạn cần chú ý đến kích thước và thứ tự khởi tạo.

7. Khởi tạo mảng động
Nếu kích thước mảng chỉ biết khi chạy chương trình, hãy dùng hàm malloc
để cấp phát động bộ nhớ. Mảng động rất hữu ích khi không biết trước kích thước.
Ví dụ: Khởi tạo mảng động
int *arr = (int *)malloc(5 * sizeof(int));
for (int i = 0; i < 5; i++) {
arr[i] = i;
}
Trong ví dụ này, bộ nhớ được cấp phát động và từng phần tử mảng được gán giá trị qua vòng lặp.
Ngăn chặn rò rỉ bộ nhớ:
Bộ nhớ cấp phát động cần phải giải phóng bằng hàm free
sau khi sử dụng, nếu không sẽ gây lãng phí tài nguyên bộ nhớ (memory leak).
free(arr);
Bổ sung kiểm tra lỗi:
Nên kiểm tra xem việc cấp phát bộ nhớ có thành công không để tránh lỗi khi hết bộ nhớ.
if (arr == NULL) {
printf(“Không thể cấp phát bộ nhớ.
“);
}
8. Lỗi thường gặp và thực tiễn tốt nhất
Nguy cơ khi dùng mảng chưa khởi tạo:
Trong C, khai báo mảng không tự động khởi tạo. Nếu sử dụng mảng chưa khởi tạo, các giá trị rác có thể gây ra lỗi không mong muốn. Luôn luôn khởi tạo mảng một cách rõ ràng.
Quản lý kích thước bằng #define
:
Quản lý kích thước mảng bằng macro #define
giúp dễ thay đổi kích thước và tăng tính bảo trì cho mã nguồn.
define SIZE 5
int arr[SIZE];
9. Kết luận
Khởi tạo mảng là kiến thức nền tảng khi lập trình C, giúp chương trình ổn định hơn nếu thực hiện đúng cách. Nắm vững các kỹ thuật như khởi tạo về 0, khởi tạo từng phần, mảng nhiều chiều, quản lý bộ nhớ động… sẽ giúp bạn viết mã hiệu quả và tránh lỗi. Hãy áp dụng các kiến thức này vào dự án tiếp theo để nâng cao trình độ lập trình của mình!