Variable Number of Arguments ใน C++
บางครั้งอาจต้องการฟังก์ชันที่รับจำนวนพารามิเตอร์ไม่คงที่ แทนที่จะเป็นจำนวนคงที่ C/C++ รองรับความสามารถนี้ โดยใช้ ellipsis (...) และ header <cstdarg> (หรือ stdarg.h)
ฟังก์ชันจะมีพารามิเตอร์สุดท้ายเป็น ellipsis และพารามิเตอร์ก่อนหน้าเป็น int แทนจำนวนอาร์กิวเมนต์ ขั้นตอนการใช้งาน:
- กำหนดฟังก์ชันพารามิเตอร์สุดท้ายเป็น ... และพารามิเตอร์ก่อนหน้าเป็น int
- สร้างตัวแปร
va_listในฟังก์ชัน - ใช้
va_startเริ่มต้น va_list ด้วยจำนวนอาร์กิวเมนต์ - ใช้
va_argและ va_list เข้าถึงแต่ละอาร์กิวเมนต์ - ใช้
va_endทำความสะอาดหน่วยความจำของ va_list
ตัวอย่างโค้ด: หาค่าเฉลี่ย
#include <iostream>
#include <cstdarg>
using namespace std;
double average(int num, ...) {
va_list valist;
double sum = 0.0;
int i;
va_start(valist, num);
for (i = 0; i < num; i++)
sum += va_arg(valist, int);
va_end(valist);
return sum / num;
}
int main() {
cout << "Average of 2, 3, 4, 5 = " << average(4, 2,3,4,5) << endl;
cout << "Average of 5, 10, 15 = " << average(3, 5,10,15) << endl;
}
ผลลัพธ์
Average of 2, 3, 4, 5 = 3.5 Average of 5, 10, 15 = 10