在C语言的学习和应用中,我们常常需要输入多个参数,然而参数的个数并不确定,这就给我们函数参数的初始化带来一定的挑战。实际上,这样的函数定义是存在方法的。
RET_TYPE func_name(type first_arg, ...){
//此函数结构就可以接收任意多个参数。
}
举个栗子(求任意多个整数之和):
#include<stdio.h>
#include<stdarg.h> //varible parament 可变参数必须要添加
int v_sum(int n,...){
va_list ap;//定义va_list变量
va_start(ap,n);//初始化va_list变量,其中这个n只能是(...)前面的一个参数。
int i;
int s=0;
for(i=0;i<n;i++){//n此处表示后面的参数的个数
int x = va_arg(ap,int);//va_arg每运行一次取(...)中的一个参数。
s += x;
}
va_end(ap);//释放资源
return s;
}
int main(){
int s;
s = v_sum(5,234,267,192,238,428);
printf("v_sum = %d\n",s);
return 0;
}
c语言的函数,允许接受任意多个参数,有几个需要注意的点:
1.形参列表不确定有多少个,形参可用 ... 来表示。
2.(...)之前必须存在一个有名参数。
3.(...)之前的有名参数必须要传递。
4.关于<stdarg.h>的使用
#include<stdarg.h>
va_list ap; 独特的数据类型
void va_start(va_list ap, last);//初始化类型,第二个参数为最后一个有名参数。
type va_arg(va_list ap,type);//每调用一次va_arg能够从ap中解析一个参数,该参数的类型取决于type。
void ca_end(va_list ap);//结束后释放资源va_start所申请。
void va_copy(va_list desk,va_list src);//拷贝,其实就是va_list类型变量的赋值。(不能直接赋值)