ความหมาย
Multi-dimensional array คือ array ที่มีมิติ (dimension) 3 ขึ้นไป C รองรับ array หลายมิติ ขึ้นอยู่กับขีดจำกัดของคอมไพเลอร์
Syntax
datatype arrayname[size1][size2]...[sizeN];
ตัวอย่าง 3D Array
int a[3][3][3]; // 3x3x3 = 27 elements
ตัวอย่างโปรแกรมที่ 1: 3D Array แบบ Compile-time Init
#include <stdio.h>
int main() {
int a[2][2][2] = {1,2,3,4,5,6,7,8};
int i, j, k;
printf("Elements:\\n");
for (i = 0; i < 2; i++) {
for (j = 0; j < 2; j++) {
for (k = 0; k < 2; k++) {
printf("%d ", a[i][j][k]);
}
}
}
printf("\\n");
return 0;
}ผลลัพธ์
Elements: 1 2 3 4 5 6 7 8
ตัวอย่างโปรแกรมที่ 2: 3D Array ขนาด 3x3x2
#include <stdio.h>
int main() {
int students[3][3][2] = {
{{1, 2}, {4, 5}}, // tab 0
{{2, 4}, {3, 5}}, // tab 1
{{7, 8}, {9, 3}} // tab 2
// students[0][2] และ students[1][2] จะเป็น 0 (zero-initialized)
};
for (int tab = 0; tab < 3; tab++) {
for (int row = 0; row < 3; row++) {
for (int col = 0; col < 2; col++) {
printf("students[%d][%d][%d] = %d\\n",
tab, row, col, students[tab][row][col]);
}
}
}
return 0;
}ผลลัพธ์
students[0][0][0] = 1 students[0][0][1] = 2 students[0][1][0] = 4 students[0][1][1] = 5 students[0][2][0] = 0 students[0][2][1] = 0 students[1][0][0] = 2 students[1][0][1] = 4 students[1][1][0] = 3 students[1][1][1] = 5 students[1][2][0] = 0 students[1][2][1] = 0 students[2][0][0] = 7 students[2][0][1] = 8 students[2][1][0] = 9 students[2][1][1] = 3 students[2][2][0] = 0 students[2][2][1] = 0
คำอธิบาย: initializer ไม่ครบ -> element ที่เหลือจะเป็น 0 อัตโนมัติ
การจัดเก็บในหน่วยความจำ (Row-major Order)
C ใช้ Row-major order: index ตัวสุดท้ายเปลี่ยนเร็วที่สุด
a[i][j][k] address = base + (i * size2 * size3 + j * size3 + k) * sizeof(type)
การประยุกต์ใช้
- 3D Graphics: vertices, textures
- Scientific computing: 3D matrices, tensors
- Image processing: RGB channels (height x width x 3)
- Game development: 3D world grids
ข้อควรระวัง
- Stack overflow หากประกาศ array ใหญ่ในฟังก์ชัน (ใช้ malloc แทน)
- Cache performance: เข้าถึงแบบ sequential (loop นอกสุด index แรก) เร็วกว่า
- Initialization ต้องระวังลำดับ element