zoukankan      html  css  js  c++  java
  • 关于可变参数列表stdarg

    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
    ",result);
        return 0;
    }

    注意:

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

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

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

    因此:

      我们必须使用命名参数;

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

  • 相关阅读:
    CSS盒子模型
    getContextPath、getServletPath、getRequestURI、request.getRealPath的区别
    MYSQL中的CASE WHEN END AS
    单点登录的精华总结
    git&github
    June 21st 2017 Week 25th Wednesday
    June 20th 2017 Week 25th Tuesday
    June 19th 2017 Week 25th Monday
    June 18th 2017 Week 25th Sunday
    June 17th 2017 Week 24th Saturday
  • 原文地址:https://www.cnblogs.com/weiyouqing/p/8996167.html
Copyright © 2011-2022 走看看