可变参数的函数(c++)【转载】

摘自《c语言精彩编程百例》,要定义可变参数的函数,在c++当中当包含<cstdarg>,在c语言当中当包含<stdarg.h>,使用任何可变长度的变元被访问之前,必须先用va_start()初始化变元指针argptr,argptr用va_list宏类型定义。初始化argptr后,经过va_arg()的调用,以作为下一个参数类型的参数类型,返回参数,最后取完所有参数并从函数返回之前,必须调用va_end()。如果未正确使用va_end(),程序可能瘫痪

   

#include<iostream>

#include <cstdarg>

using namespace std;

   

double sum_series(int num, ...);

   

int main()

{

      double d;

      //在子函数实际调用中共有五个参数,第一个为序列个数,其后为相加的各个数

      d = sum_series(4, 0.5, 0.25, 0.125, 0.06254);

      cout << "Sum of series is " << d << endl;

      return 0;

}

   

double sum_series(int num, ...)

{

      double sum = 0.0, t;

      va_list argptr;            //定义参变量

       

      //初始化argptr

      va_start(argptr, num);

   

      //计算序列之后

      for (; num;num--)

      {

            t = va_arg(argptr, double);

            sum += t;

      }

   

      va_end(argptr);            //序列关闭

      return sum;

}

posted @ 2015-12-04 03:01  硫酸亚铜  阅读(226)  评论(0编辑  收藏  举报