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

จำนวนตัวแปรของอาร์กิวเมนต์ใน C++


บางครั้ง คุณอาจเจอสถานการณ์หนึ่ง เมื่อคุณต้องการมีฟังก์ชัน ซึ่งสามารถรับจำนวนตัวแปรของอาร์กิวเมนต์ เช่น พารามิเตอร์ แทนที่จะเป็นจำนวนพารามิเตอร์ที่กำหนดไว้ล่วงหน้า ภาษาการเขียนโปรแกรม C/C++ จัดเตรียมวิธีแก้ปัญหาสำหรับสถานการณ์นี้ และคุณได้รับอนุญาตให้กำหนดฟังก์ชันที่ยอมรับตัวแปรจำนวนตัวแปรตามความต้องการของคุณ ตัวอย่างต่อไปนี้แสดงคำจำกัดความของฟังก์ชันดังกล่าว

int func(int, ... ) {
   .
   .
   .
}
int main() {
   func(1, 2, 3);
   func(1, 2, 3, 4);
}

ควรสังเกตว่าฟังก์ชัน func() มีอาร์กิวเมนต์สุดท้ายเป็นวงรี กล่าวคือ สามจุด (...) และจุดก่อนหน้าจุดไข่ปลาจะเป็น int เสมอ ซึ่งจะแสดงจำนวนอาร์กิวเมนต์ตัวแปรทั้งหมดที่ส่งผ่าน ในการใช้ฟังก์ชันดังกล่าว คุณต้องใช้ไฟล์ส่วนหัว stdarg.h ซึ่งมีฟังก์ชันและมาโครเพื่อใช้งานฟังก์ชันของอาร์กิวเมนต์ตัวแปรและทำตามขั้นตอนที่กำหนด -

  • กำหนดฟังก์ชันที่มีพารามิเตอร์ตัวสุดท้ายเป็นวงรี และตัวก่อนจุดไข่ปลาจะเป็น int เสมอ ซึ่งจะแสดงจำนวนอาร์กิวเมนต์

  • สร้าง va_list พิมพ์ตัวแปรในนิยามฟังก์ชัน ประเภทนี้ถูกกำหนดไว้ในไฟล์ส่วนหัว stdarg.h

  • ใช้ int พารามิเตอร์และ va_start มาโครเพื่อเริ่มต้น va_list ตัวแปรไปยังรายการอาร์กิวเมนต์ แมโคร va_start ถูกกำหนดในไฟล์ส่วนหัว stdarg.h

  • ใช้ 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); //initialize valist for num number of arguments
   for (i = 0; i < num; i++) { //access all the arguments assigned to valist
      sum += va_arg(valist, int);
   }
   va_end(valist); //clean memory reserved for 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