C พารามิเตอร์ตัวแปร
บางครั้งคุณอาจจะพบกับสถานการณ์ดังกล่าวที่คุณต้องการที่จะทำงานที่มีจำนวนตัวแปรของการขัดแย้งมากกว่าจำนวนที่กำหนดไว้ล่วงหน้าของการขัดแย้ง ภาษา C สำหรับสถานการณ์นี้ให้บริการโซลูชั่นที่ช่วยให้คุณสามารถกำหนดฟังก์ชั่นที่สามารถรับจำนวนตัวแปรของพารามิเตอร์ตามความต้องการที่เฉพาะเจาะจงได้ ตัวอย่างต่อไปนี้แสดงให้เห็นถึงความหมายของการเช่นฟังก์ชั่น
int func(int, th. ) { . . . } int main() { func(1, 2, 3); func(1, 2, 3, 4); }
โปรดทราบว่าfunc () ฟังก์ชันการขัดแย้งเขียนสุดท้ายจุดไข่ปลาว่าสามจุด ( th. ) ข้อโต้แย้งว่าก่อนที่จะจุดไข่ปลาอยู่เสมอ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 <stdio.h> #include <stdarg.h> double average(int num,th.) { va_list valist; double sum = 0.0; int i; /* 为 num 个参数初始化 valist */ va_start(valist, num); /* 访问所有赋给 valist 的参数 */ for (i = 0; i < num; i++) { sum += va_arg(valist, int); } /* 清理为 valist 保留的内存 */ va_end(valist); return sum/num; } int main() { printf("Average of 2, 3, 4, 5 = %f\n", average(4, 2,3,4,5)); printf("Average of 5, 10, 15 = %f\n", average(3, 5,10,15)); }
เมื่อโค้ดข้างต้นจะรวบรวมและดำเนินการจะผลิตผลดังต่อไปนี้มันควรจะตั้งข้อสังเกตว่าค่าเฉลี่ย () ฟังก์ชันที่เรียกว่าสองครั้งในแต่ละครั้งพารามิเตอร์ตัวแรกหมายถึงจำนวนทั้งหมดจะถูกโอนตัวแปรจุดที่ใช้ในการส่งมอบจำนวนตัวแปรของการขัดแย้ง
Average of 2, 3, 4, 5 = 3.500000 Average of 5, 10, 15 = 10.000000