可变参数列表解析


可变参数列表解析

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

```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\n",ave1);
printf("%d\n",ave2);
printf("%d\n",ave3) ;
system("pause");
return 0;
 } 
  输出结果:
  15
  20
  25  
  ``` 
     

可变参数的限制

注意:
  • 可变参数必须从头到尾逐个访问,中途停止是可以的,但不可以一开始就访问参数列表中间的从参数。
  • 参数列表中至少有一个命名参数。如果一个都没有的话,va_start是无法使用的。
  • 这些宏是无法直接判断实际存在的参数的数量。
  • 这些宏无法判断每个参数的类型。
优质内容筛选与推荐>>
1、(3.3)狄泰软件学院C++课程学习剖析四
2、用AjaxPro实现定时刷新效果
3、HDU1025(Constructing Roads In JGShining's Kingdom)
4、安卓开发自定义View的框架学习
5、MYSQL中存储过程的创建,调用及语法


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号