c++如何往函数传入未知个数的变量 C++自定义不确定参数个数函数在实际运行时如何获取实际传入参...
一个例子:
#include <iostream>
#include <cstdarg>
using namespace std;
//这个需要编译器支持c++17以上的标准
template<typename T=int,typename ...Ts>
void f(T a=0,Ts ...args)
{
cout<<a;
if constexpr (sizeof...(args)>0)
{
cout<<",";
f(args...);
}
}
//这个只需要编译器支持c++11以上就可以了
template<typename T>
void f2(T a)
{
cout<<a;
}
template<typename T,typename ...Ts>
void f2(T a,Ts ...args)
{
cout<<a<<",";
f2(args...);
}
//这个对编译器支持的c++标准的要求更低
void f3(int n,...)
{
va_list p;
va_start(p,n);
cout<<n<<",";
for(int i=0;i<n-1;i++)
cout<<va_arg(p,int)<<",";
cout<<va_arg(p,int)<<endl;
va_end(p);
}
int main()
{
f(1,1.414,"ok");
cout<<endl;
f();
cout<<endl;
f2(666);
cout<<endl;
f2(6.66,"可以",100);
cout<<endl;
f3(6,25,3,8,7,123,44);
return 0;
}
运行结果如下图:
程序里的函数,可以在调用前,在屏幕上显示,要求用户输入函数实际参数,例如:参数个数,参数1,参数2,...以换行结束。程序读入参数,调用相应函数,特别是 同名参数个数不同的函数。
主函数 main() 的参数,可在拍入程序执行的命令行拍入参数。同时,main() 要写成:
int main(int argc, char *argv[]) {....}
程序内: argc 等于 命令行 参数个数 (含程序名),字符串数组 argv[0]是程序名,argv[i]是参数i, i = 0,1,2,3..到 argc-1. 用 sscanf() 可以转换参数成 int, float, double 等类型。
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;}
#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 print(int Num,...) { va_list ap; va_start(ap,Num); for(int i=0;i<Num;i++) { char *T = va_arg(ap,char*); printf("%s
",T); } } int main() { int n; print(2,"dsdsdss","sdaddd"); printf("%d
",Sum(10,1,2,3,4,5,6,7,8,9,10)); return 0; }
c++如何往函数传入未知个数的变量
答:一个例子:include <iostream> include <cstdarg> using namespace std;//这个需要编译器支持c++17以上的标准 template<typename T=int,typename ...Ts> void f(T a=0,Ts ...args){ cout<0){ cout<<",";f(args...);} } //这个只需要编译器支持c++11以上就可以了 template<typename T>...
求助,VB函数的参数个数未知,要如何传递参数
答:ByVal表示该参数按值传递,简称值参。此时形参与实参各占一个独立的存储空间,形参的存储空间是调用时才分配的。如果选择值参,则实参与过程体内的运算无关,它仍保留原值。因此,为了保护实参不受过程运算的影响,应选用数值参数。ByRef表示该参数按地址传递,称为变量参数,简称变参。此时形参与实参共同...
...不是加在分数里,例如Y=X+(2/X)+1,图像会如何变化?
答:回答:如果加一个正常数项那么向上平移常数个单位,如果加一个负常数项那么向下平移常数绝对值个单位,如果常数在未知数上,那么可以改变曲度,增减性,和令图像左右平移,如果再给加个函数,可能扭曲函数图像。
c++向函数传递函数
答:include<iostream>using namespace std;void func(double a[],int n,double (*fp)(double)); //把函数声明到文件的前面,这是个好习惯,因为可能除了main函数外还有其他的函数调用这个函数呐double test(double x);void main(){ double a[100]; int n; cout<<"请输入数组元素个数"<...
c语言里怎样输入未知个数的的数据?是输入整形,每次输入的数都是随机...
答:你可以自己写一个函数,初始化一个整型数组,然后每次数据量大于这个数组容量时,在扩容 伪代码如下:1.初始化一个10位的整型数组 int[],i=0,size=10 2.输入时判断i<=size int[i]=input 3.如果i>size 4.新建一个int[size+5]的数组,并将前面的数据copy到这个新数组中 5.重复步骤2 ...
在matlab中,如何定义函数式子中的未知常数。
答:有个定义符号变量的函数楼主可能不知:syms是定义符号变量的函数 syms a 之后a就可以直接当做一个变量使用了,而不在乎它的取值,也就是符号变量。当然由此运行的结果肯定会包含a,运算出来的结果也是符号变量。如多个变量需要定义,则可连续定义,空格分开:syms a c ...
matlab如何构造带有未知数的传递函数?
答:用matlab构造传递函数,最常用的方法是句柄函数(@(x))。即 gs=@(s)s+k/s
如何传递一个长度未知的数组为形参到函数里?
答:一个你可以在动态分配的时候就可以统计数组元素的个数,另一个你可以在输入结束的时候添加一个结束符,在函数访问到结束符的时候就停止循环了(就像字符串数组中的\0一样)
matlab 函数怎样处理未知个数的参数
答:可以使用varargin来指代任意个数的参数输入
在C语言中如何使输入的数值赋值到未知数上
答:首先从你的表述上看感觉你基础很薄弱,问题是,c语言中数据在输入的时候都要先定义一个变量用来存储用户输入的数据 比如,我要输入一个数字,那么我就要定义一个变量比如这样:int a;然后,我才能调用输入函数scanf(“%d”,&a);来从键盘输入数字,而输入的数字就存放在a里面了。所以,如果需要将...