/*
add()函数累加可选性自变量。
自变量:第一个强制性自变量表示可选性自变量的数量,可选性自变量是double类型。
返回值:累加和,类型是double
va_list va_start() va_arg() va_end()
*/
#include <stdarg.h>
#include<iostream>
using namespace std;
double add1(int n , ...)
{
int i=0;
double sum=0.0;
va_list argptr;
va_start(argptr,n); /*初始化argptr 此宏的第二个自变量一定要“...”之前的那个参数*/
for (i=0;i<n;++i) /*将每个可选性自变量以double类型读取,并累加到sum*/
sum+=va_arg(argptr,double);//va_arg宏会取得目前argptr所指向的可选性自变量 也会将argptr移动到下一个可选择自变量
//va_arg宏的第二个参数是刚才读入的可选择的自变量的类型*/
va_end(argptr);//结束解析
return sum;
}
void show1(int m,...)//m为强制性自变量 ...为可选性自变量
{
va_list dest, argptr1;
va_start(argptr1,m);//第二个自变量必为最后一个强制性变量的名称 argptr1为自变量指针 指向第一个可变参数
dest = argptr1;
for (int s=0;s<m;++s)
cout<<va_arg(dest,double)<<'/t'; //dest 移动到下一个可选择自变量
va_end(dest);//关闭指针
va_end(argptr1);
}
int main()
{
int num = 3;
double a = 2.18, b =1.0, c = 3.0;
double e = add1(num,a, b, c);
show1(num,a, b, c);
cout <<"the result is:" <<e <<endl;
return 0;
}
/*stdarg.h中的另一个成员
va_copy(va_list dest,va_list src);
va_copy宏使用目前的src来初始化可选性自变量指针dest。然后就可以用dest从src指向的位置开始存取可选性自变量列表*/