关于变长参数表的

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;
}




你可能感兴趣的:(c,工作,list,null,语言,FP)