首页 > 代码库 > 参数个数可变的函数

参数个数可变的函数

使用va_start(),va_arg(),va_end(),操作了可变元

定义如下:

#include<stdarg.h>type va_arg(va_list argptr,type);void va_start(va_list argptr,last_parm);void va_end(va_list argptr);

用法:

 1 #include<stdio.h> 2 #include<stdarg.h> 3  4 double sum_series(int num, ...); 5  6 int main(void) 7 { 8     double d; 9     d=sum_series(4,0.5,0.25,0.125,0.0625);10     printf("%f\n",d);11     return 0;12 }13 14 double sum_series(int num, ...)15 {16     double sum=0.0;17     double t;18 19     va_list argptr;20 21     va_start(argptr,num);22 23     for(;num;--num)24     {25         t=va_arg(argptr,double);26         sum=sum+t;27     }28     va_end(argptr);29     return sum;30 }

简单理解是这样的,

定义函数的时候参数表最右定义一个int型变量作为参数变量个数,

使用的时候通过va_start定义num数目的参数指针,也就是声明了有几个参数,

每一次调用va_arg就是将当前参数定义为type类型的参数,之后argptr下移,

全部参数取完之后使用va_end()结束,这样会确保堆栈正常(参数保存在堆栈中)。

参数个数可变的函数