设为首页 加入收藏

TOP

c语言中对可变参数列表的简单理解
2015-11-19 23:07:14 来源: 作者: 【 】 浏览:11
Tags:言中 可变 数列 简单 理解
函数原型中一般情况下参数的数目是固定的,但是如果想在不同的时候接收不定数目的参数时该怎么办呢? c语言提供了可变参数列表来实现。
可变参数列表是通过宏来实现的,这些宏定义在stdarg.h的头文件中。头文件中声明了一个va_list类型和va_start、va_arg、va_end三个宏。我们使用可变参数列表的时候需要声明一个va_list类型的变量配合这三个宏使用。
va_start(va_list变量名,省略号前面最后一个有名字的参数):在提取可变参数前必须调用这个宏实现初始化。
va_arg(va_list变量名, type_of_var):用于提取变量,type_of_var是提取的变量的类型。返回对应类型的参数。
va_end(va_list变量名):在参数处理完毕之后,必须调用va_end做一些清理。
下面的例子摘自c和指针
?
#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
#include
float average(int n_value,...)  //求指定数量值的平均值
{
 va_list var_arg;      //声明va_list变量
 int count = 0;
 float sum = 0;
 va_start(var_arg, n_value);  //准备访问可变参数
 {
  for (count = 0; count < n_value; count++)
  {
   sum += va_arg(var_arg, int);
  }
  va_end(var_arg);   //完成可变参数的处理
  return sum / n_value;
 }
}
int main()
{

 printf("%lf\n", average(6,1,2,3,4,5,6));
 system("pause");
 return 0;
}

?

?
上面的例子是实现求指定数量值的平均值的可变参数列表实现办法。
当然可变参数的应用还有很多比如实现字符串的拷贝
#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
#include
void nstrcpy(char *dest, ...)
{
 va_list     pi;   //声明va_list变量
 char        *p;
 va_start(pi, dest);
 while ((p = va_arg(pi, char *)) != NULL)   //通过va_arg(pi,char *)来提取参数列表中的变量  
 {
  strcpy(dest, p);
  dest += strlen(p);        //复制完成一个变量进行下一个的复制
 }
 va_end(pi);
}
int main()
{
 char a[100];
 char *b = "asdg";
 char *c = "qwewq";
 char *d = "aswq";
 nstrcpy(a, b, c, d);
 printf("%s\n", a);
 system("pause");
 return 0;
}

?

完成多个字符串的拷贝。
对可变参数列表的简单理解,对于三个宏具体的定义还不是很明白,等彻底搞清楚了再来完善关于可变参数列表的博客。
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C语言之按位异或 下一篇C语言实现之运动员跳水名次问题

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: