欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

c语言可变参数列表函数

程序员文章站 2022-05-29 22:05:52
...

函数原型中一般情况下参数的数目是固定的,但是如果想在不同的时候接收不定数目的参数时该怎么办呢?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<stdio.h>
#include<stdlib.h>
#include<stdarg.h>
#include<string.h>
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<stdio.h>
#include<stdlib.h>
#include<stdarg.h>
#include<string.h>
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;
}

参考链接:https://www.2cto.com/kf/201511/449297.html

相关标签: 可变参数列表