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

การส่งอาร์เรย์ไปยังฟังก์ชันใน C++

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) แทนเพื่อความปลอดภัย