可变函数列表源码剖析

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

#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

阅读更多
上一篇有一个字符数组的内容为:&quot;student a am i&quot;,请你将数组的内容改为&quot;i am a student&quot;. 要求: 不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。
下一篇使用可变参数,实现函数,求函数参数的平均值。
想对作者说点什么? 我来说一句

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

关闭
关闭