可变参数列表 应用简介

可变参数列表即函数参数可以是不固定的,

例如常规函数 type func(type A,type B,type C);定义了三个参数,因此调用的时候也必须导入三个参数。

可变参数列表type func(type A , ......);type A为固定参数,......省略号为可变参数列表,可长可端。常见的printf函数声明为int printf(const char *fmt, ...)

介绍可变参数列表的几个应用点:

1.头文件 #include <stdarg.h>

2.数据结构

2.1 va_list     数据变量类型,实则是一个char 类型指针

2.2 va_start(arg_ptr, argN)    返回可变参数列表开始的指针,argN为函数声明中最后一个固定参数

2.3 va_arg(arg_ptr, type)    返回空间指向空间type类型的数据

2.4 va_end(arg_ptr)    清空参数列表,并设置参数指针arg_ptr无效

注:va在这里是variable-argument(可变参数)的意思

举例:

    #include <stdio.h>
    #include <stdarg.h>   
    void simple_va_fun(int start, ...)  
    {  
        va_list  arg_ptr;  
        int nArgValue = start;    //可变参数的总值  
        int nArgCout = 0;         //可变参数的数目计数   
        va_start(arg_ptr, start); //返回固定参数start后的可变参数列表起始地址 
        do  
        {  
            ++nArgCout;  
            nArgValue = va_arg(arg_ptr, int);//得到一个可变参数的整型值(arg_ptr指向的int类型数据)  
            printf("the %d th arg: %d\n", nArgCout, nArgValue);  //输出参数值            
        } while (nArgValue != -1);  //等于-1则退出循环部分
      
        va_end(arg_ptr);  // 清空参数列表,并设置参数指针arg_ptr无效
    }  
      
    int main(int argc, char* argv[])  
    {  
        simple_va_fun(100, 200, 12, 25, 56,-1);  
        return 0;  
    }  
执行结果如下:








猜你喜欢

转载自blog.csdn.net/xmzzy2012/article/details/80485443