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();这个也很好理解,肯定是释放内存了,并且销毁指针。

原文地址:https://www.cnblogs.com/huhudollar/p/5113039.html