C语言中的可变参数


1、需要头文件

  1. #include <stdarg.h>  

2、函数定义

  1. void logcmd(int arg0,...)  
  2. void logcmd(char *arg0,...)  


3、解析

i、数字类型

  1. void logcmd(int n,...)  
  2. {  
  3.     va_list ap;  
  4.     int i = 0;  
  5.   
  6.     va_start(ap,n);//使ap指向开始参数  
  7.     for(;n;n--)//检索参数  
  8.         printf("%d ",va_arg(ap,int));  
  9.     va_end(ap);//释放参数  
  10.     printf("\n");  
  11. }  

其中n表示参数的个数,n之后才是真正的参数。调用如: 

  1. logcmd(0);  
  2. logcmd(1,9);  
  3. logcmd(2,5,6);  
输出:
  1. 9  
  2. 5 6  
当然,如果是int类型的参数,也可以不通过n来,比如我们实际用到的参数都是正数,这是可以在末尾多加一个负数,来实现:
  1. void logcmd(int arg0,...)  
  2. {  
  3.     va_list ap;  
  4.     int i;  
  5.     va_start(ap,arg0);//使ap指向开始参数   
  6.     for(i = arg0; i >= 0; i = va_arg(ap,int))//检索参数   
  7.         printf("%d ",i);  
  8.     va_end(ap);//释放参数   
  9.     printf("\n");  
  10. }  
调用:
  1. logcmd(3,1,2,-1);  
输出:
  1. 3 1 2  

ii、字符类型

  1. void argsChar(int n,...)  
  2. {  
  3.     va_list args;  
  4.     char *s;  
  5.     va_start(args,n);  
  6.     for(int i=0;i<n;i++){  
  7.         s = va_arg(args,char*);  
  8.         printf("%s\n",s);  
  9.     }  
  10.     va_end(args);  
  11. }  

调用: 

  1. argsChar(2,"hello","world");  
输出:
  1. hello  
  2. world  

相关内容