开发手册 欢迎您!
软件开发者资料库

C - 变量参数

C变量参数 - 从简单和简单的步骤学习C编程,从基本概念开始,包括C概述,语言基础知识,环境设置,程序结构,基本语法,文字,数据类型,变量,常量,存储类,运算符,决策,函数,范围规则,循环,数组,指针,字符串,结构,联合,位字段,Typedef,输入和输出,头文件,类型转换,错误处理,递归,变量参数,内存管理,预处理器,指令,命令行参数等

有时候,当你想要一个函数时,你可能会遇到这种情况,这个函数可以使用可变数量的参数,即参数,而不是预定义数量的参数. C编程语言为这种情况提供了解决方案,您可以根据需要定义一个可以接受可变数量参数的函数.以下示例显示了此类函数的定义.

  int func(int,...){. . . }  int main(){ func(1,2,3);  func(1,2,3,4); }

应该注意函数 func()将其最后一个参数作为省略号,即三个点( ... )和椭圆之前的那个总是 int ,它将表示传递的变量参数的总数.要使用此类功能,您需要使用 stdarg.h 头文件,该文件提供了实现变量参数功能的函数和宏,并遵循给定的步骤 :

  • 定义一个函数,其最后一个参数为省略号,而省略号之前的一个函数始终为 int ,它将代表参数数量.

  • 在函数定义中创建 va_list 类型变量.此类型在stdarg.h头文件中定义.

  • 使用 int 参数和 va_start 宏来将 va_list 变量初始化为参数列表.宏va_start在stdarg.h头文件中定义.

  • 使用 va_arg 宏和 va_list 变量访问参数列表中的每个项目.

  • 使用宏 va_end 清理分配给 va_list的内存变量.

现在让我们按照上面的步骤写下一个简单的函数,它可以获取可变数量的参数并返回他们的平均值和负数;

#include #include double average(int num,...) {   va_list valist;   double sum = 0.0;   int i;   /* initialize valist for num number of arguments */   va_start(valist, num);   /* access all the arguments assigned to valist */   for (i = 0; i < num; i++) {      sum += va_arg(valist, int);   }   /* clean memory reserved for valist */   va_end(valist);   return sum/num;}int main() {   printf("Average of 2, 3, 4, 5 = %f\n", average(4, 2,3,4,5));   printf("Average of 5, 10, 15 = %f\n", average(3, 5,10,15));}

编译并执行上述代码时,会产生以下结果.应该注意,函数 average()已被调用两次,并且每次第一个参数表示传递的变量参数的总数.只有省略号用于传递可变数量的参数.

Average of 2, 3, 4, 5 = 3.500000Average of 5, 10, 15 = 10.000000
> dc69N7BtnPgpT" })