C中可以定义变长参数表,但是没有名字的情况下怎么样去使用这些参数。不过C语言既然支持这种表示方式,也提供了方法去访问他们
va_list fp 定义了一个参数指针用来指向匿名参数
va_start(fp,from)这是对参数指针初始化,在使用参数指针的时候必须要进行初始化,from是有名参数的最后一个,这样fp就指向第一个无名参数了
va_arg(fp,int) 去参数,根据你提供的步长去去参数,这里我是去int长,你可以是double之类的
va_end(ap) 这个是清楚信息使用的
#include<stdarg.h> #include<stdio.h> void minprintf(char *format,...) { int ival = 0; double dval = 0; char *sval = NULL,*p = NULL; //参数指针 va_list ap; //初始化参数指针,让他指向format后面的匿名参数 va_start(ap,format); for(p = format;*p;p++) { if(*p != '%') { putchar(*p); continue; } //遇到%号跳过%号读取后面的那个字符 switch(*++p) { case 'd': ival = va_arg(ap,int); printf("%d",ival); break; case 'f': dval = va_arg(ap,double); printf("%f",dval); break; case 's': sval = va_arg(ap,char*); printf("%s",sval); break; default: { putchar(*p); break; } } } //清理工作 va_end(ap); } int main() { int ival = 5; char *sval = "world!!"; minprintf("hello is %s",sval); return 0; }