急!请高手指教c++如何定义一个参数个数不确定的函数?

请高手指教c++如何定义一个参数个数不确定的函数?该函数参数不确定,没有具体的参数,请高手指教.(请给个列子)... 请高手指教c++如何定义一个参数个数不确定的函数?
该函数参数不确定,没有具体的参数,请高手指教.(请给个列子)
展开
 我来答
何度千寻
2015-10-26 · TA获得超过5899个赞
知道大有可为答主
回答量:1381
采纳率:91%
帮助的人:558万
展开全部

  VA_LIST是在C语言中解决变参问题的一组宏,所在头文件:#include <stdarg.h>,用于获取不确定个数的参数。

  VA_LIST的用法:

  1. 首先在函数里定义一具VA_LIST型的变量,这个变量是指向参数的指针;

  2. 然后用VA_START宏初始化刚定义的VA_LIST变量;

  3. 然后用VA_ARG返回可变的参数,VA_ARG的第二个参数是你要返回的参数的类型(如果函数有多个可变参数的,依次调用VA_ARG获取各个参数);

  4. 最后用VA_END宏结束可变参数的获取。


以下是一个定义一个参数个数不确定的函数的简单例子:

#include <cstdarg>
#include <iostream>
using namespace std;
double average ( int num, ... )
{
  va_list arguments;                     // A place to store the list of arguments
  double sum = 0;
  va_start ( arguments, num );           // Initializing arguments to store all values after num
  for ( int x = 0; x < num; x++ )        // Loop until all numbers are added
    sum += va_arg ( arguments, double ); // Adds the next value in argument list to sum.
  va_end ( arguments );                  // Cleans up the list
  return sum / num;                      // Returns some number (typecast prevents truncation)
}
int main()
{
  cout<< average ( 3, 12.2, 22.3, 4.5 ) <<endl;
  cout<< average ( 5, 3.3, 2.2, 1.1, 5.5, 3.3 ) <<endl;
}
匿名用户
2013-07-29
展开全部
可以用重载函数, 把你这个函数不确定的个数或者参数不一样都可以定义一遍,遇到你输入的参数,他会自己找匹配的运行.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-07-29
展开全部
#include <iostream>
#include <cstdarg> //contain va_start,va_arg,va_end

using namespace std;

int sum(int num, ...)
{
va_list parg;
int arg;
int s;
int i;

va_start(parg, num);
for (s = 0, i = 0; i < num; i++)
{
arg = va_arg(parg, int);
s += arg;
}
va_end(parg);

return s;
}

int main()
{
cout<<sum(1,1)<<endl; //1
cout<<sum(2,1,2)<<endl; //1+2
cout<<sum(3,1,2,3)<<endl; //1+2+3
cout<<sum(4,1,2,3,4)<<endl;//1+2+3+4

return 0;
}
va_list(用于定义va_list型变量,该变量作为引用的指针)、va_start(用于建立扫描参数表的起始指针)、va_arg(用于解析参数表中的参数,接受一个va_list型变量和下一个希望出现的数据类型)和va_end(顾名思义)。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-07-29
展开全部
int c
我都不知道怎么回答你的问题了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式