急!请高手指教c++如何定义一个参数个数不确定的函数?
请高手指教c++如何定义一个参数个数不确定的函数?该函数参数不确定,没有具体的参数,请高手指教.(请给个列子)...
请高手指教c++如何定义一个参数个数不确定的函数?
该函数参数不确定,没有具体的参数,请高手指教.(请给个列子) 展开
该函数参数不确定,没有具体的参数,请高手指教.(请给个列子) 展开
4个回答
展开全部
VA_LIST是在C语言中解决变参问题的一组宏,所在头文件:#include <stdarg.h>,用于获取不确定个数的参数。
VA_LIST的用法:
首先在函数里定义一具VA_LIST型的变量,这个变量是指向参数的指针;
然后用VA_START宏初始化刚定义的VA_LIST变量;
然后用VA_ARG返回可变的参数,VA_ARG的第二个参数是你要返回的参数的类型(如果函数有多个可变参数的,依次调用VA_ARG获取各个参数);
最后用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(顾名思义)。
#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
我都不知道怎么回答你的问题了
我都不知道怎么回答你的问题了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询