注册 登录
编程论坛 C语言论坛

可变参数的疑问

shulun743 发布于 2022-10-14 13:25, 595 次点击
程序代码:

#include <stdio.h>
#include <stdarg.h>

 
double average(int num,...)
{
    va_list valist;
    int sum = 0.0;
    int i;

 
    /* 为 num 个参数初始化 valist */
    va_start(valist, num);

 
    /* 访问所有赋给 valist 的参数 */
    for (i = 0; i < num; i++)
    {
        sum = va_arg(valist, int);
        printf("sum = %d\n", sum);
    }
    /* 清理为 valist 保留的内存 */
    va_end(valist);

 
    return sum/num;
}

 
int main()
{
   printf("Average of 2, 3, 4, 5 = %d\n", average(4, 2,3,4,5));
}


问题:
    1、va_list valist;  其中的 valist; 是变量吧?

    2、printf("Average of 2, 3, 4, 5 = %d\n", average(4, 2,3,4,5)); 打印后,它的值怎么会是 “Average of 2, 3, 4, 5 = 4202508” ? 这个4202508怎么出来的?
1 回复
#2
rjsp2022-10-14 14:35
程序代码:
#include <stdio.h>
#include <stdarg.h>

double average( size_t num, ... )
{
    va_list valist;
    va_start( valist, num );

    double sum = 0;
    for( size_t i=0; i!=num; ++i )
    {
        int val = va_arg(valist, int);
        printf( "item(%zu) = %d\n", i, val );

        sum += val;
    }

    va_end(valist);
    return num==0 ? 0 : sum/num;
}

 
int main( void )
{
   printf( "Average of { 2, 3, 4, 5 } = %f\n", average(4, 2,3,4,5) );
}


输出
item(0) = 2
item(1) = 3
item(2) = 4
item(3) = 5
Average of { 2, 3, 4, 5 } = 3.500000
1