C++ ไม่อนุญาตส่ง array ทั้งอาร์เรย์เป็น argument ตรงๆ แต่ส่ง pointer ไปยัง array ได้ (ระบุชื่ออาร์เรย์โดยไม่มี index)
มี 3 วิธีส่ง 2D array:
1. ระบุขนาด column (column size ตายตัว)
void processArr(int a[][10]) { ... }
2. ส่ง array ของ pointers
void processArr(int *a[10]) { ... }
// เรียกใช้:
int *array[10];
for(int i=0; i<10; i++) array[i] = new int[10];
processArr(array);
3. ส่ง pointer to pointer
void processArr(int **a) { ... }
// เรียกใช้:
int **array = new int*[10];
for(int i=0; i<10; i++) array[i] = new int[10];
processArr(array);
ตัวอย่างรันได้ (วิธีที่ 1)
#include <iostream>
using namespace std;
void processArr(int a[][2]) {
cout << "element at index 1,1 is " << a[1][1];
}
int main() {
int arr[2][2] = {{0,1}, {2,3}};
processArr(arr);
return 0;
}
ผลลัพธ์
element at index 1,1 is 3
หมายเหตุ: วิธีที่ 2, 3 ต้องลบหน่วยความจำในลำดับย้อนกลับ (ลบ 1D arrays ก่อน แล้วค่อยลบ array ของ pointers)