background image

c 语言实现函数可变参数

前言:   

       本文在很大程度上改编自网友 kevintz

的 C

语言中可变参数的用法 一文,在行文

之前先向这位前辈表示真诚的敬意和感谢。   

   一、什么是可变参数   

         我们在 C 语言编程中有时会遇到一些参数个数可变的函数,例如 printf()函数,其函

数原型为:     

   int    printf(    const    char*    format,    ...);     

         它除了有一个参数 format 固定以外,后面跟的参数的个数和类型是可变的(用三

“…”

个点

做参数占位符),实际调用时可以有以下的形式:     

       printf("%d",i);     

       printf("%s",s);     

       printf("the    number    is    %d    ,string    is:%s",    i,    s);           

       以上这些东西已为大家所熟悉。但是究竟如何写可变参数的 C 函数以及这些可变参

数的函数编译器是如何实现,这个问题却一直困扰了我好久。本文就这个问题进行一些探

讨,希望能对大家有些帮助.   

    

   二、写一个简单的可变参数的 C 函数     

           先看例子程序。该函数至少有一个整数参数,

其后是占位符 ,表示后面参数的个

数不定.    在这个例子里,所有的输入参数必须都是整数,函数的功能是打印所有参数的

值.   

   函数代码如下:   

   //示例代码 1:可变参数函数的使用   

   #include    "stdio.h"   

   #include    "stdarg.h"   

   void    simple_va_fun(int    start,    ...)     

   {     

           va_list    arg_ptr;     /*申请一个变量,

           int    nArgValue    =start;