C使用 stdarg 宏来实现函数的可变参数列表

  • 先贴一个代码实例,然后再进行讲解:
    • #include <stdio.h>
      #include <stdarg.h>
      
      float average(int n_values, ...) {
          va_list var_arg;
      	int count;
      	float sum = 0;
      
      	va_start(var_arg, n_values);
      
      	for (count = 0; count < n_values; count++) {
      	    sum += va_arg(var_arg, int);
      	}
      
      	va_end(var_arg);
      
      	return sum / n_values;
      }
      
      int main(void) {
          printf("The average of 1, 2, 3, 4, 5 is : %f\n", average(5, 1, 2, 3, 4, 5));
      	printf("The average of 1, 2, 3, 4, 5, 6 is : %f\n", average(6, 1, 2, 3, 4, 5, 6));
      	return 0;
      }



  • 函数声明了一个类型为 va_list (定义于 strarg.h 中) 的变量 var_arg ,它用于访问函数参数列表的未确定部分
  • 接着这个变量 (va_arg) 通过调用函数 va_start 来初始化,va_atart 接受两个参数:
    • 第一个参数为 va_list 变量的名字
    • 第二个参数为省略号前最后一个有名字的参数
    • 初始化过程把变量 var_arg 指向函数参数参数列表可变部分的第一个参数
  • 接着使用函数 va_arg 来依次访问函数可变参数列表部分的参数,va_arg 函数接受两个参数:
    • 第一个参数为 va_list 变量
    • 第二个为欲访问的可变参数列表的参数的类型

    • 在这个例子中这个参数类型 int 恰好是所有参数的类型,在更通常的情况你可能学要根据前一个参数的类型来推测后一个参数的类型

    • 函数 va_arg 返回这个参数的值,并使得 va_arg 指向列表的下一个可变参数
  • 最后当访问完最后一个参数后需要调用函数 va_end 来销毁一些相关的变量

  • 使用可变参数的限制:


  • 其它在使用可变参数列表时需要注意的:


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值