Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29496
  • 博文数量: 11
  • 博客积分: 410
  • 博客等级: 下士
  • 技术积分: 142
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-02 22:28
文章分类

全部博文(11)

文章存档

2011年(6)

2010年(5)

我的朋友

分类:

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

阅读(413) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~