• 可变参数列表解析


    可变参数列表解析

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

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

    可变参数的限制

    注意:
    • 可变参数必须从头到尾逐个访问,中途停止是可以的,但不可以一开始就访问参数列表中间的从参数。
    • 参数列表中至少有一个命名参数。如果一个都没有的话,va_start是无法使用的。
    • 这些宏是无法直接判断实际存在的参数的数量。
    • 这些宏无法判断每个参数的类型。
  • 相关阅读:
    Oracle 导入导出 dmp 文件
    zTree树
    下拉复选框
    jQuery Pagination分页插件
    下载java生成PDF
    Activiti 流程实例、任务、执行对象及相关的表
    Activiti 删除key值相同的所有不同版本的流程定义
    Activiti 查询最新版本的流程定义
    Activiti 查看流程图
    Activiti 删除流程定义
  • 原文地址:https://www.cnblogs.com/xjq6898/p/7801843.html
Copyright © 2020-2023  润新知