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.这些宏无法判断每一个参数的类型;

    因此:

      我们必须使用命名参数;

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

  • 相关阅读:
    Grumpy: Go 上运行 Python!
    Qt5.7.0配置选项(configure非常详细的参数)
    vs2010 2013 2015+ 必备插件精选(15个)
    solr与.net主从复制
    MVC5模板部署到mono
    solr主从复制
    CentOS 5.5安装图解教程
    VMware7安装CentOS6.5教程
    VMware安装CentOS 图文教程
    在VirtualBox下安装CentOS教程(截图版)
  • 原文地址:https://www.cnblogs.com/weiyouqing/p/8996167.html
Copyright © 2011-2022 走看看