C++ ไม่อนุญาตให้ส่งอาร์เรย์ทั้งลูกเป็นอาร์กิวเมนต์ให้ฟังก์ชันโดยตรง แต่สามารถส่ง pointer ไปยังอาร์เรย์ได้โดยระบุชื่ออาร์เรย์โดยไม่ต้องมีดัชนี
หากต้องการส่งอาร์เรย์มิติเดียวเป็นอาร์กิวเมนต์ สามารถประกาศพารามิเตอร์ทางการ (formal parameter) ได้ 3 วิธี ซึ่งให้ผลเหมือนกันทั้งหมด เพราะแต่ละวิธีบอกคอมไพเลอร์ว่าจะรับ pointer ของจำนวนเต็ม
วิธีที่ 1: พารามิเตอร์เป็น Pointer
void myFunction(int *param) {
// ...
}
วิธีที่ 2: พารามิเตอร์เป็นอาร์เรย์มีขนาด
void myFunction(int param[10]) {
// ...
}
วิธีที่ 3: พารามิเตอร์เป็นอาร์เรย์ไม่มีขนาด
void myFunction(int param[]) {
// ...
}
ทั้งสามวิธีเทียบเท่ากันคือรับ pointer ไปยัง int ตัวแรก
ตัวอย่างฟังก์ชันคำนวณค่าเฉลี่ย
double getAverage(int arr[], int size) {
int i, sum = 0;
double avg;
for (i = 0; i < size; ++i) {
sum += arr[i];
}
avg = double(sum) / size;
return avg;
}
การเรียกใช้งาน
#include <iostream>
using namespace std;
double getAverage(int arr[], int size);
int main() {
int balance[5] = {1000, 2, 3, 17, 50};
double avg;
avg = getAverage(balance, 5);
cout << "Average value is: " << avg << endl;
return 0;
}
ผลลัพธ์
Average value is: 214.4
ข้อสังเกต: ขนาดของอาร์เรย์ไม่มีผลต่อฟังก์ชัน เพราะ C++ ไม่ทำ bounds checking สำหรับพารามิเตอร์ทางการ ควรส่งขนาด (size) ไปด้วยเสมอ หรือใช้ std::vector/std::array / std::span (C++20) แทนเพื่อความปลอดภัย