c++怎样编写不确定参数个数的函数?

作者&投稿:澄放 (若有异议请与网页底部的电邮联系)
c++怎样编写不确定参数个数的函数~

c++怎样编写不确定参数个数的函数
C++定义的函数是可以支持函数参数个数不确定的。VA_LIST是在C++语言中解决变参问题的一组宏,所在头文件:#include ,用于获取不确定个数的参数同时使用...代替多个参数,调用时只需要根据需要传入多个参数。
VA_LIST的用法:
首先在函数里定义一具VA_LIST型的变量,这个变量是指向参数的指针;
然后用VA_START宏初始化刚定义的VA_LIST变量;
然后用VA_ARG返回可变的参数,VA_ARG的第二个参数是你要返回的参数的类型(如果函数有多个可变参数的,依次调用VA_ARG获取各个参数);
最后用VA_END宏结束可变参数的获取。
参考代码:求多个数得平均值
#include #include 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;}

  VA_LIST是在C语言中解决变参问题的一组宏,所在头文件:#include ,用于获取不确定个数的参数。
  VA_LIST的用法:
首先在函数里定义一具VA_LIST型的变量,这个变量是指向参数的指针;
然后用VA_START宏初始化刚定义的VA_LIST变量;
然后用VA_ARG返回可变的参数,VA_ARG的第二个参数是你要返回的参数的类型(如果函数有多个可变参数的,依次调用VA_ARG获取各个参数);
最后用VA_END宏结束可变参数的获取。

以下是一个定义一个参数个数不确定的函数的简单例子:
#include #include 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;}

重载和缺省都不能解决楼主的问题。想解决这个问题,必须用到va_list。
但是注意,并不是所有编译器都支持这个功能,下面这个简单的求均值函数在VC6.0下编译通过。希望楼主能用到自己的实际应用中。

#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;
}

补充一句:不确定输入参数个数的函数应该尽量的避免使用,除非万不得已,最好不要用。

不确定参数个数的时候通常用的是函数的重载,可以理解成 函数名相同的两个不同的函数.

不确定参数类型的话可以用 模板(template).传什么类型就变成什么类型.

想到两种方法:

一是用函数重载,列出带有不同个数参数的函数;

二是用带默认值的形参实现。


用C#编写,定义一个元素个数不确定的数组,对数组进行排序,并求数组中的...
private void button2_Click(object sender, EventArgs e){ \/\/ 动态数组用 arraylist 及它自己的方法实现排序 ArrayList arr = new ArrayList();arr.Add(100);arr.Add(20);arr.Add(60);arr.Add(40);arr.Add(90);arr.Add(77);arr.Add(11);arr.Sort();label1.Text = "";foreach (var ...

利用vba怎样编写将工作表中第三行到最后一行(不确定)的数据复制并插入到...
原则上VBA可以做到,但是你没有说清楚什么才叫做新的,只看日期吗,只看序号吗,我就假设你的A列是序号,用序号判断吧,程序代码如下:

用JAVA编写一个程序,读入个数不确定的考试分数,并且判断有多少个分数是...
import java.util.ArrayList;import java.util.Scanner;public class Test { public static int getMin(ArrayList<Integer> ls,int count){ int min=0;for (int i = 0; i <ls.size(); i++) { if(ls.get(i)<count\/ls.size()){ min=min+1;} } return min;} public static int get...

编写程序将某个位数不确定的正整数进行三位分节后输出,如87654321,则...
include<stdio.h> include<malloc.h> main(){ int a;scanf("%d",&a);int i,b;for(i=1;b==0;i++)b=a\/10;int c=i\/3;int *p = (int *)malloc((c+1)*sizeof(int));int j,d;for(j=0;j<=c;j++){ d=a%1000;\/\/ printf("%d",d); \/\/这里实现了分节,但是输出没...

利用vba怎样编写将工作表中第三行到最后一行(不确定)的数据复制并插入复...
VBA语句如下(sheet1复制sheet2):sheets(1).range("3:" & sheets(1).usedrange.rows.count).copy sheets(2).range("a2")

卡尼曼不确定情况下的三种启发式
代表性、可得性以及锚定和调整。《不确定状态下的判断启发式和偏差》是由(美)卡尼曼编写的一本书籍,3种最重要的启发式包括:代表性、可得性以及锚定和调整,本书被誉为“不确定状况下的判断”研究领域的圣经。

用c++编写程序,将某一个输入位数不确定的正整数按照标准的3位字节格式...
\/\/ 用字符处理比较方便 include<iostream> using namespace std;int main(){ int i,j,len;char a[20];cin.getline(a,20);len=strlen(a);j=len%3;for(i=0;i<len;i++){ cout<<a[i];if((i<len-1) && (i+1)%3==j)cout<<",";} cout<<endl;system("pause");return 0;...

编写程序,将用户输入的一个位数不确定的正整数按照标准的三位分节格式...
这其实就是一个10到1000进制转化, 把1000进制的每一位保存在数组里, 最后按一定顺序输出就是了 int main(){ int v[20] = {0};int iTop = 0;int i = 0;scanf("%d", &i);while (i != 0){ v[iTop++] = i % 1000;i \/= 1000;} while (--iTop >= 0){ printf("%d", v...

C语言指针,编写函数,将某个位数不确定的正整数按照标准的三位分节格式...
include<stdio.h>void f1(char *s,char c) { char b; while ( *s ) { b=*s; *s=c; c=b; s++; } *s=c; s++; *s=0;}void fun(int n,char *res) { int i,m; m=0; *res=0; while ( n ) { if ( m&&m%3==0 ) f1(res,','); f1(res,n%10...

用C语言编写程序,将某个位数不确定的正整数进行三位分节后输出,比如输 ...
include <iostream.h> void main(){ int result[256];int m,count=0;cin>>m;while (m != 0){ result[count++] = m%1000;m \/= 1000;} for (int i=count-1; i>=0; i--){ cout<<result[i]<<' ';} cout<<endl;}

户县17077154666: c++怎样编写不确定参数个数的函数 -
翁勤芬司: c++怎样编写不确定参数个数的函数 C++定义的函数是可以支持函数参数个数不确定的.VA_LIST是在C++语言中解决变参问题的一组宏,所在头文件:#include ,用于获取不确定个数的参数同时使用...代替多个参数,调用时只需要根据需要传...

户县17077154666: 急!请高手指教c++如何定义一个参数个数不确定的函数?
翁勤芬司: #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); ...

户县17077154666: c++ boost function 如何绑定不定参数函数 -
翁勤芬司: 有时候需要写不定个数参数的函数.就像c语言的sprintf函数.函数申明方法是比较固定的:return-type functionName( [type t1] …) 比如: void fun(…); int printf ( const char * format, … ); 省略号的位置就是不定个数的参数列表了.

户县17077154666: C语言 麻烦帮写个不定参数函数的程序 -
翁勤芬司: #include "stdarg.h" //n表示输入参数,总的个数,后面是各个元素的值 int va_add(int n,...) {va_list lst;int i;int t = 0;va_start(lst,n);for (i = 0; i < n; i++){int c = va_arg(lst, int);printf("%d: %d\n", c);t += c;}return t;} int main() {int t = va_add(4,1,2,3,4);printf("Sum is:%d\n", t);getch();return 0; }

户县17077154666: 现有一个函数,有不确定多少个的参数,如何去定义这个函 -
翁勤芬司: vb6 中使用数组 在函数中判断数组大小C/C++ 中使用指针,同时传递指针的大小给函数,或是用链表,原理是一样的

户县17077154666: C++关于数量不定参数函数的一个程序 -
翁勤芬司: hwo 的类型为 char* ,在利用提取double型数据值时应该将其转换为double*.可将:for(i=0,big=*who;i<n;i++) { if(big<*who) big=va_arg(who,double); else va_arg(who,double); } 改为: for(i=0,big=*(double*)who;i<n;i++){ if(big<*(double*)who) big=va_arg(who,double); else va_arg(who,double); }

户县17077154666: C语言不定参数个数在自定义函数中的使用
翁勤芬司: #include <stdio.h> #include <stdarg.h> void f1(int a,...) { va_list va; va_start(va,a); int b = va_arg(va,int); int *c = va_arg(va, int *); printf("%d %d %d\n",a,b,*c);va_end(va); } void main() { int a=1,b=2,c=3; f1(a,b,&c); } 关于不定参数函数的用法,2...

户县17077154666: C++自定义不确定参数个数函数在实际运行时如何获取实际传入参数的个数? -
翁勤芬司: #include"cstdarg" #include"iostream" using namespace std; //c参数类型,参数个数不确定. //自定义方法 int Sum(int Num,...) {int S = 0 ,T;va_list ap;va_start(ap,Num);for(int i=0;i<Num;++i){T = va_arg(ap,int); S+=T;}return S; } void ...

户县17077154666: 在c/c++中如何判断不定参数的个数和类型? -
翁勤芬司: 就算是不定参数,第一个参数也必须给定.

户县17077154666: 菜鸟求教,我想写个方法,方法的参数的个数不确定,该怎么写这个方法? -
翁勤芬司: 可以使用java的可变参,列子如下 public class Varable { public static void main(String [] args){ System.out.println(add(2,3)); System.out.println(add(2,3,5)); } public static int add(int x,int ...args){ int sum=x; for(int i=0;i<args.length;i++){ sum+=args[i]; } return sum; } }

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网