如何定义变长参数个数的函数

定义参数个数不确定的函数,需用到头文件stdarg.h,该头文件是专门为变长参数函数所用。

参数变长函数的声明:void function(int intVal, …),当然参数类型可以为double或其他,返回类型也可以自己修改。

方法:

先用头文件stdarg.h中的宏va_list定义一个指向参数的指针ap,va_list ap;

再用宏va_start初始化指针ap,va_start(ap,知名变量名intVal);

再用va_arg使指针ap指向下一参数,并且取出该参数,va_arg(ap,取出参数的类型int);

最后所有参数取完后,用va_end清理掉指针ap va_end(ap);

下边是定义一个void minprintf(char *,…)函数,演示标准库函数printf是如何实现变长参数输出的。

/* *************************************************** *test.c *本程序主要目的是学习如何定义变长参数的函数, *通过演示输出函数printf的输出过程体现 *************************************************** */ #include <stdio.h> #include <stdarg.h> /*主要目的为让函数能够接收可变参数*/ int main() { /* *定义一个变长参数的函数,实现对变长参数的调用,输出处理*第一个参数为字符串,后边参数任意, *对字符串进行分字符输出*/ void minprintf(char *,…); int intA=30; double douB=2.999; char * strC="succeed"; minprintf("intNum is %d,doubleNum is %f,string is %s\n",intA,douB,strC); return 0; } void minprintf(char *str,…) { va_list ap;/*va_list 在C语言中解决变参问题的一组宏,所在头文件:stdarg.h*定义一具VA_LIST型的变量,这个变量是指向参数的指针*/char *p;int ival;/*定义一个整型变量,储存va_arg返回整型参数的值*/double dval;/*定义一个浮点变量,储存va_arg返回浮点参数的值*/char *sval;/*定义一个字符串变量,,储存va_arg返回字符串参数的值*/va_start(ap,str);/*VA_START宏,用最后一个知名变量参数初始化刚定义的VA_LIST变量*/for(p=str;*p;p++)/*对字符串进行按字符遍历的方法*/{if(*p!='%')/*对字符串的每个字符进行遍历,未遇到字符%时,原样输出*/{//printf("%c",*p);//Okputchar(*p);continue;}switch(*++p) /*p指向%后的一个字符*/{case 'd':ival=va_arg(ap,int);/*用VA_ARG返回可变的参数,VA_ARG的第二个参数是你要返回的参数的类型*/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); //Okfor(sval=va_arg(ap,char *);*sval;sval++)putchar(*sval);break;default:putchar(*p);break;}}va_end(ap); }

困难是人的教科书。

如何定义变长参数个数的函数

相关文章:

你感兴趣的文章:

标签云: