可变参数列表简析

一、定义:
C语言中的可变参数是指将函数实现成为可以接受一个以上的任意参数的形式

二、实现一个求平均值的函数

#include <stdio.h>
#include<stdarg.h>
//实现n个数求其平均值
int average(int n, ...)
{
    va_list arg;
    int i = 0;
    int sum = 0;
    va_start(arg,n);
    for(i=0; i<n; i++)
    {
        sum+=va_arg(arg,int);
    }
    return sum/n;
    va_end(arg);
}
int main()
{
    int ret = average(3,18,12,30);//求18,12,30 三个数的平均值
    printf("%d\n",ret);
    system("pause");
    return 0;
}

要实现此功能,需要用到以下几个知识点
1、va_list arg
首先va_list是一个 typedef char * va_list 的指针类型,用它创建一个叫做arg的变量,用于访问参数列表中的未确定部分
2、va_start (arg,n)
va_start用于初始化arg变量,将arg变量设置为指向可变参数部分的第一个参数
第一个参数是:va_list所定义的变量名,即arg;
第二个参数是:省略号前面最后一个参数的名字,即n。
3、va_arg(arg,int)
va_arg是一个宏,可以接受两个参数:va_list所创建的变量和参数列表中下一个参数的类型。
va_arg返回这个参数的值,并且使va_arg指向下一个可变参数。
4、va_end
访问完最后一个可变参数时,需要调用va_end
三、使用可变参数的注意事项
1、可变参数必须从头开始访问,可以允许只访问从头开始的一部分参数,但不允许一开始就从列表中间访问参数;
2、参数列表中至少要有一个命名参数,否则无法使用va_start初始化变量。

猜你喜欢

转载自blog.csdn.net/S_Sandra/article/details/80344100