要计算一系列值的平均值,我们假定它们并不存储于数组中,试图用可变参数列表完成这个任务。
可变参数要实现必须得保证参数列表中至少有一个参数,否则无法使用va_list可变参数的实现过程: 形参实例化时给形参变量分配的地址是连续的,而且实例化时是从最右边的变量开始分配地址的,由于形参变量是分配在栈区,故第一个参数的地址是最小的,而由于给定了第一个参数,因此可以通过地址访问其他的形参变量。
/* **计算指定数量的值的平均值 */ #include<stdarg.h> #include<stdio.h> float average(int n_value, ...) { va_list var_arg; int count; float sum = 0; /* **准备访问可变参数。 */ va_start(var_arg, n_value); /* **添加取自可变参数列表的值。 */ for (count = 0; count < n_value; count += 1) { sum += va_arg(var_arg, int); } /* **完成处理可变参数。 */ va_end(var_arg); return sum / n_value; } int main() { float sum = 0.0; sum = average(5, 99, 97, 99, 44, 66); printf("%f", sum); return 0; }
本程序在VS2017下运行通过。