//可变参数的编程练习
//编程步骤:
//1.在函数原型中使用省略号,省略号应该是最后一个参量
//2.在函数定义中创建一个va_list类型的变量
//3.用宏将该变量初始化为一个参数列表
//4.用宏访问这个参数列表
//5.用宏完成清理工作
#include <stdio.h>
#include <stdarg.h>
double sum(int, ...);//函数原型中使用省略号
//最右边的参量(省略号前)起着特殊作用,它指定可变参数列表中的参数个数
int main(void)
{
double s, t;
s = sum(3,1.1,2.5,13.3);
t = sum(6, 1.1, 2.1, 13.1, 4.1, 5.1, 6.1);
printf("return value for "
"sum(3,1.1,2.5,13.3): %g\n", s);
//两个引号内的内容会自动连接在一起,%g表示根据数值的不同自动选择%f或%e.%e的格式在指数小于-4或大于等于精度时使用。
printf("return value for "
"sum(6, 1.1, 2.1, 13.1, 4.1, 5.1, 6.1): %g\n", t);
return 0;
}
double sum(int lim, ...)//lim指定可变参数列表中的参数个数
{
va_list ap;//函数定义中创建一个va_list类型的变量,用于存放参数
double tot = 0;
int i;
va_start(ap, lim);//用宏将该变量初始化为一个参数列表,将参数列表复制到va_list变量中
for(i=0; i<lim; i++)
tot += va_arg(ap, double);//用宏访问这个参数列表,double指定访问参数的类型,类型必须要匹配
va_end(ap); //宏完成清理工作,释放动态分配的用于存放参数的内存
return tot;
}
//编程步骤:
//1.在函数原型中使用省略号,省略号应该是最后一个参量
//2.在函数定义中创建一个va_list类型的变量
//3.用宏将该变量初始化为一个参数列表
//4.用宏访问这个参数列表
//5.用宏完成清理工作
#include <stdio.h>
#include <stdarg.h>
double sum(int, ...);//函数原型中使用省略号
//最右边的参量(省略号前)起着特殊作用,它指定可变参数列表中的参数个数
int main(void)
{
double s, t;
s = sum(3,1.1,2.5,13.3);
t = sum(6, 1.1, 2.1, 13.1, 4.1, 5.1, 6.1);
printf("return value for "
"sum(3,1.1,2.5,13.3): %g\n", s);
//两个引号内的内容会自动连接在一起,%g表示根据数值的不同自动选择%f或%e.%e的格式在指数小于-4或大于等于精度时使用。
printf("return value for "
"sum(6, 1.1, 2.1, 13.1, 4.1, 5.1, 6.1): %g\n", t);
return 0;
}
double sum(int lim, ...)//lim指定可变参数列表中的参数个数
{
va_list ap;//函数定义中创建一个va_list类型的变量,用于存放参数
double tot = 0;
int i;
va_start(ap, lim);//用宏将该变量初始化为一个参数列表,将参数列表复制到va_list变量中
for(i=0; i<lim; i++)
tot += va_arg(ap, double);//用宏访问这个参数列表,double指定访问参数的类型,类型必须要匹配
va_end(ap); //宏完成清理工作,释放动态分配的用于存放参数的内存
return tot;
}