码迷,mamicode.com
首页 > 其他好文 > 详细

关于可变参数列表stdarg

时间:2018-05-05 21:48:43      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:main   art   \n   va_end   数列   void   span   start   限制   

1.对于可变参数

 可变参数列表通过stdarg.h中的宏实现;

 主要有一个va_list类型

    三个宏:va_start,va_arg,va_end;

 va_start格式:

  va_start(argument1,argument2);

  其中argument1是一个va_list,定义的变量;

    argument2是“...”省略号前的最后一个有名字的参数;

 va_arg格式:

  va_arg(argument1,argument2);

  其中argument1是一个va_list,定义的变量;

    argument2是下一个参数的数据类型:int,char,float等;

 va_end格式:

  va_end(argument);

  其中argument是一个va_list,定义的变量;

举例:

#include <stdio.h>
#include <stdarg.h>

float average(int nbytes,...)
{
    int i = 0;
    int sum = 0;
    va_list list;
    va_start(list,nbytes);
    for(i = 0;i < nbytes;i++)
    {
        sum += va_arg(list,int);
    }
    va_end(list);
    return sum / nbytes;
}

int main(void)
{
    float result = 0; 
    result = average(4,22,1,2,1,10);
    printf("%f\n",result);
    return 0;
}

注意:

  使用这些宏存在两个基本的限制:

  1.这些宏无法判断实际存在的参数的数量;

  2.这些宏无法判断每一个参数的类型;

因此:

  我们必须使用命名参数;

  在上例中,命名参数指定了实际传递的参数数量;并且类型被假定为整型;

 

关于可变参数列表stdarg

标签:main   art   \n   va_end   数列   void   span   start   限制   

原文地址:https://www.cnblogs.com/weiyouqing/p/8996167.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!