可变函数列表源码剖析

这是一段可变参数的简单函数:

#include<stdio.h>
#include<stdarg.h>
double average(int n, ...)
{
    va_list arg;
    int i = 0;
    double sum = 0;
    va_start(arg, n);
    for(i = 0; i < n; i++)
    {
        sum = sum + va_arg(arg, double);
    }
    va_end(arg);
    return sum / n;
}
int main()
{
    double a = 1.3;
    double b = 2.5;
    double c = 3.7;
    double avg1 = average(2, a, b);
    double avg2 = average(3, a, b, c);
    printf("avg1 = %lf\n", avg1);
    printf("avg2 = %lf\n", avg2);
    system("pause");
    return 0;
}

这个函数是求n个参数的平均值,因为要求的数平均值是未知的,所以形参第一个传的是要求的数的平均值的个数,后面用“…”代替。
va_list arg 就相当于char* arg,意思是定义了一个指针。
va_start(arg, n) 的意思是用arg指向位置区域的第一个参数。
va_arg(arg, int)的意思是将arg 指向的参数强制类型转换为整型,这段代码就表示现在指向参数的值,并且同时现在它的指针arg已经向后移动了四个字节,指向了下一个参数。
va_end(arg)的意思是释放了指针arg的空间。
用这些宏的时候需要引用头文件inlcude

阅读更多 登录后自动展开
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页