多参函数的使用举例 以及说明!

来源:互联网 发布:3d全景展示源码 编辑:程序博客网 时间:2024/05/17 00:05

/*
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指向的位置开始存取可选性自变量列表*/