您的位置:首页 > 编程语言 > C语言/C++

C语言不定参数的函数

2015-11-28 13:54 267 查看
(1)va_list

定义了一个指针arg_ptr, 用于指示可选的参数.

(2)va_start(arg_ptr, argN)

使参数列表指针arg_ptr指向函数参数列表中的第一个可选参数,argN是位于第一个可选参数之前的固定参数,
或者说最后一个固定参数.如有一va函数的声明是void va_test(char a, char b, char c, ...), 则它的固定参数依次是a,b,c, 最后一个固定参数argN为c, 因此就是va_start(arg_ptr, c).

(3)va_arg(arg_ptr, type)

返回参数列表中指针arg_ptr所指的参数, 返回类型为type. 并使指针arg_ptr指向参数列表中下一个参数.返回的是可选参数, 不包括固定参数.

(4)va_end(arg_ptr)

清空参数列表, 并置参数指针arg_ptr无效.

举例:

#include <stdio.h>
#include <stdarg.h>
#include <string.h>
/*功能打印第一个不定参数,和所有参数之和(包括固定参数)*/
int sumi(int c, ...)
{
va_list argptr;//定义指针argptr
va_start(argptr, c); //初始化变元指针,c等于不定参数的前一个固定参数
int sum = c;
c = va_arg(argptr, int); //作为下一个参数类型的参数类型,返回不定参数
//c保存第一个不定参数
printf("%d\n", c);//打印第一个不定参数
while(0 != c) //末尾特定字符指示结束
{
sum = sum + c;
c = va_arg(argptr, int);
}
va_end(argptr);
return sum;
}
/*功能:num是不定参数的个数,求出不定参数的总和*/
double sum_series(int num, ...)
{
double sum = 0.0, t;
va_list argptr;
va_start(argptr, num);//初始化变元指针
while (num--)
{
t = va_arg(argptr, double);//double是返回类型
sum = sum + t;
}
va_end(argptr);
return sum;
}

int main()
{
int i = sumi(1,2,3,4,5,6,7,8,9,0);//这里2,...,0是可选的参数,2是第一个不定参数
printf("%d\n", i);
double d = sum_series(4, 1/3.0, 1/4.0, 1/5.0, 1/6.0);//注:不定参数要用浮点数
printf("%f\n", d);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: