Khi khai báo mảng đa chiều trong C/C++, kích thước của chiều đầu tiên (bên trái nhất) có thể để trống, nhưng tất cả các chiều còn lại phải được chỉ định rõ ràng.
Ví dụ
#include <stdio.h>
int main() {
// Khai báo mảng 2 chiều, để trống chiều đầu, chiều 2 = 2
int a[][2] = {{1,2}, {3,4}};
// In kích thước toàn bộ mảng (byte)
printf("%lu", sizeof(a)); // Kết quả: 16 (4 phần tử int x 4 byte)
getchar();
return 0;
}
Đầu ra
16
Giải thích
- Mảng
acó 2 hàng (tự động suy ra từ danh sách khởi tạo) và 2 cột (khai báo rõ). - Tổng cộng 4 phần tử
int. Trên hệ 32/64-bit thườngsizeof(int) = 4byte →4 * 4 = 16byte. - Cú pháp tương tự cho mảng 3 chiều:
int b[][3][4] = { ... };(chỉ để trống chiều đầu).
Ứng dụng thực tế
Kỹ thuật này thường dùng khi truyền mảng đa chiều vào hàm, nơi tham số hàm chỉ cần khai báo các chiều từ thứ 2 trở đi:
void process(int arr[][10], int rows); // Hợp lệ
// void process(int arr[][][10], int rows, int cols); // Sai - thiếu chiều 2