可变参数列表解析

可变参数列表解析

举个例子:实现一个函数可以求任意个参数的平均值

```python
#include <stdio.h>
#include <windows.h>
#include <stdarg.h> 
int average(int n,...)
{
va_list arg;//可以理解成字符指针char * 用于访问参数列表中未确定的部分
int i=0;
int sum=0;
va_start(arg,n);//这里将上面得到的字符指针后移4个字节,指向n的内存地址。
for(i=0;i<n;i++)
{
	sum += av_arg( arg ,int);//av_arg( arg , int)是将arg向后跳过4个字节(sizeof(int)大小)指向下一个参数,返回的是当前的参数而非下一个参数
}
return sum/n;
av_end(arg);//结束标志
}

int main()
{
int a=10;
int b=20;
int c=30;
int d=40;
int ave1=average(2,a,b);
int ave2=average(3,a,b,c);
int ave3=average(4,a,b,c,d);
printf("%d
",ave1);
printf("%d
",ave2);
printf("%d
",ave3) ;
system("pause");
return 0;
 } 
  输出结果:
  15
  20
  25  
  ``` 

可变参数的限制

注意:
  • 可变参数必须从头到尾逐个访问,中途停止是可以的,但不可以一开始就访问参数列表中间的从参数。
  • 参数列表中至少有一个命名参数。如果一个都没有的话,va_start是无法使用的。
  • 这些宏是无法直接判断实际存在的参数的数量。
  • 这些宏无法判断每个参数的类型。
原文地址:https://www.cnblogs.com/xjq6898/p/7801843.html