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

    基本概念
    可变参数列表是通过宏来实现的,这些宏定义于stdarg.h头文件,该文件是标准库的一部分。
    这个头文件声明了一个类型va_list和三个宏:va_start,va_arg,va_end。
    函数首先声明一个va_list类型的变量,它用于访问参数列表的未确定部分。这个变量通过调用va_start来初始化。
    为了访问参数,需要使用va_arg,这个宏接受两个参数:va_list变量和参数列表中的下一个参数类型。va_arg返回这个参数的值,并使va_arg指向下一个可变参数。类似于指针的概念。
    示例
    计算指定数量的值得平均值
    代码如下:
    #include<stdio.h>
    #include<stdarg.h>
    
    /*
    ** 计算指定数量的值得平均值
    */
    float average(int n_values, ...)
    {
        va_list var_arg;
        float sum = 0;
    
        /*
        ** 准备访问可变参数
        */
        va_start(var_arg, n_values);
    
        /*
        ** 添加取自可变参数列表的值
        */
        for (int count = 0; count < n_values; count++)
        {
            sum += va_arg(var_arg,int);
        }
    
        /*
        ** 完成处理可变参数
        */
        va_end(var_arg);
    
        return sum / n_values;
    }
    int main()
    {
        float avg_value = 0;
        printf("%f
    ", average(4, 10, 10, 10,20));
        return 0;
    }
    求列表最大值
    题目:编写一个名叫max_list的函数,它用于检查任意数目的整形参数并返回它们中的最大值。参数列表中必须以一个负值结尾,提示列表的结束。
    代码如下:
    #include<stdio.h>
    #include<stdarg.h>
    
    int max_list(int n_values,...)
    {
        va_list var_max;
        int maxValue = 0;
        int  temp_value = 0;
    
        /*
        ** 准备访问可变参数
        */
        va_start(var_max, n_values);
    
        /*
        ** 获取自可变参数列表的值
        */
        while ((temp_value = va_arg(var_max, int))>0)
        {
            if (temp_value > maxValue)
            {
                maxValue = temp_value;
            }
        }
        /*
        ** 完成处理可变参数
        */
        va_end(var_max);
        return maxValue;            
    }
    int main()
    {
        printf("最大值为%d
    ", max_list(5, 3, 4, 1, 2, -2));
        return 0;
    }
     
     
  • 相关阅读:
    JQuery 简单实现折叠菜单
    机械迷城攻略2
    ffmpeg视频转换及截图
    机械迷城攻略3
    SQL:清空数据库所有数据
    .net发送邮件outlook中文乱码
    我读我的Book
    转:精妙SQL语句收集
    SQL server 动态查询(表名或字段动态),并且获取想得到的返回值结果
    软件开发中,这些文档你用到了吗
  • 原文地址:https://www.cnblogs.com/3120931037cnk/p/7663511.html
Copyright © 2011-2022 走看看