Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

Multi-Dimensional Array ในภาษา C

ความหมาย

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