• C语言——stdarg.h


    C语言不支持函数重载,但支持可变参数。在 stdarg.h 中提供了3个方法和1个结构。

    struct va_list,参数列表

    void va_start(va_list,int); 访问参数前的准备工作

    void va_arg(va_list,void);访问参数,注意参数中的void指数据类型,实际调用时应该是int,float,char等

    void va_end(va_end);访问结束后清理工作

    使用过程

    #include <stdio.h>
    #include <stdarg.h>
    
    int main(){
        int sum(int c,...);
        
        int c = sum(6,1,2,3,4,5,5);
        
        printf("sum = %d
    ",c);
        return 0;
    }
    
    int sum(int c,...){
        va_list var_list;
        int count = 0;
        va_start(var_list,c);
        for(;c>0;c--){
            count+=va_arg(var_list,int);
        }
        va_end(var_list);
        return count;
    }

    注意:

    声明可变参数方法时,第一个参数应为int,用来表明参数数量,是不能省略的

    个人感觉:

    1.可变参数可以理解为传递给方法一个指针,参数数组的指针,因为数组指针作为参数,接受参数的方法是不知道数组大小的,所以还要传递一个参数数量,这也说明了为什么可变参数的第一个int参数不可省略。

    2.va_start();应该是初始化了一下参数指针,因为没有这个过程参数访问就会失败。

    3.va_arg();这个很明显了,就是指针解引用,并向后移动。

    4.va_end();这个也很好理解,肯定是释放内存了,并且销毁指针。

  • 相关阅读:
    小X的密码破译
    小X的加法难题
    足球联赛
    机器分配
    化装晚会
    Soundex编码
    迷之阶梯
    使用JMeter做压力测试
    SCOI 2010 序列操作
    动态求区间K大值(权值线段树)
  • 原文地址:https://www.cnblogs.com/huhudollar/p/5113039.html
Copyright © 2020-2023  润新知