标题:可变参数的疑问
只看楼主
shulun743
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2022-10-12
结帖率:50%
已结贴  问题点数:20 回复次数:1 
可变参数的疑问
程序代码:
#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怎么出来的?
搜索更多相关主题的帖子: int printf sum average num 
2022-10-14 13:25
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:20 
程序代码:
#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
2022-10-14 14:35



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-510311-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.239980 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved