您的位置:首页 > 其它

可变参数列表浅析

2017-11-20 20:09 204 查看
1,什么是可变参数?

在C语言编程中,函数中形式参数的个数一般是确定的,调用函数是一次实例化这些参数,有时候函数的参数会具有不确定性,这时候会一些参数个数可变的函数,比如,使用可变参数,求函数参数的最大值。:

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>

#include<Windows.h>

#include<stdarg.h> //可变参数列表是通过宏来实现的,这些宏定义于stdarg.h头文件               

int average(int n, ...)//...为可变参数列表部分

{
va_list arg;//声明一个va_list类型的变量arg
int i = 0;
int max = 0;
va_start(arg, n);//va_start来初始化arg,arg指向可变参数的第一个元素

//实现函数大小判断
for (i = 0; i < n; i++)
{
int val = va_arg(arg, int);//将int类型作为参数,目的是读取int长度值,va_arg是一个宏;

if (max < val)
{
max = val;
}
}
return max;
va_end(arg);//访问完成最后一个可变参数时,需要调用va_end来清理参数列表;

}

int main()

{
int a = 13;
int b = 22;
int c = 12;
int num1 = average(3, a, b, c);//使用可变参数时,应该先输入可变参数的个数,再传入参数。
printf("%d ", num1);
system("pause");
return 0;



      

从上面的例子可以看出,实现可变参的步骤如下:

  1)声明一个va_list型的变量arg,arg是用来指向第一个参数的指针,用来访问参数列表的未确定部分 

  2)然后用va_start宏初始化变量arg,这个宏的第二个参数是‘...’前的最后一个有名字的参数. 

  3)用va_arg来访问可变的参数,并且赋值于val. va_arg的第二个参数是要读取的参数的类型,这里是int型.同时va-arg指向下一个可变参数

  4)使用结束,用va_end宏结束可变参数.
关于stdarg宏
可变参数列表是通过宏来实现的,这些宏定义在stdarg.h 文件中。该文件声明了一个类型va-list和三个宏va-start,va-arg,va-end,三个宏的作用只是用来确定可变参数列表中每个参数的内存地址,编译器是不知道参数的实际数目的。参数中的“..."用于提示此处可能传递数量和类型未确定的参数。

  可变参数的注意事项

      ①可变参数必须从头到尾按顺序逐个访问,可以中途停止

      ②如果一开始就想访问中间元素是不行的

    

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: