全部博文(11)
分类:
2011-04-29 15:48:37
所谓含有变长参数的函数是指该函数可以接受可变数目的形参。例如我们都非常熟悉的
printf,scanf等等。
va_list是定义了一个保存函数参数的数据结构。
va_start(argp,msg)是将argp指向第一个可变参数,而msg是最后一个确定的参数。
最后一个确定的参数的含义是指它以后的参数都是可变参数,如果有下面的函数声明
void demo(char *msg1,char *msg2,...)
那么这里的最后一个确定参数就是msg2。
va_arg(argp,char *)返回当前参数的值,类型为char *,然后将argp指向下一个变长参
数。从这一步可以看出来我们可以通过va_start和va_arg遍历所有的变长参数。
va_end 将argp的值置为0。
看下面的例子:
#include
#include
#include
void demo(char *msg,...)
{
va_list argp;
int arg_number=0;
char *para = msg;
va_start(argp,msg);
while(1)
{
if ( strcmp( para, "\0") != 0 )
{
arg_number++;
printf("parameter %d is: %s\n",arg_number,para);
}
else
break;
para = va_arg(argp,char *);
}
va_end(argp);
}
int main()
{
demo("Hello","World","\0");
system("pause");
return 0;
}