之前看了很多博客,感觉多少还是有点云里雾里。
在C语言中文网看到的这篇博客讲解十分清晰(由于联系不到原作者,故侵权请联系博主删除):
C语言中文网:C语言可变参数函数
以下内容为原创
看过之后自己写了一段代码实现(编译环境为VS2017):
#include <stdio.h>
void My_va(int S_num,int num,...) //S_num为学号,num固定,作为科目数;后面的是学生的各次考试成绩,目的是计算其平均成绩
{
int i, grade = 0, Sum = 0;
//初始化部分
va_list arg; //定义第一个可选参数
__crt_va_start(arg,num); // va_start 使用第一个可选参数的位置来初始化参数指针。第二个参数必须是该函数最后一个有名称参数
for (i = 0; i < num; i++)
{
Sum += __crt_va_arg(arg, int); //对每个可选参数,读取类型为int的参数
}
__crt_va_end(arg); //当不再需要使用参数指针时,必须调用 va_end 释放
grade = Sum / num;
printf("学号 %d 的同学 %d 次考试的平均成绩为 %d \n", S_num, num, grade);
}
int main(void)
{
My_va(20, 3, 88, 85, 90);
My_va(24, 5, 78, 77, 90, 86, 88);
}
运行结果如下: