【问题标题】:function calls with different amount of arguments [duplicate]具有不同数量参数的函数调用[重复]
【发布时间】:2013-09-16 19:55:34
【问题描述】:

例如,一个函数可以接受无限量(或者更准确地说,是一个非常大的数量)相同类型的参数,比如说整数,然后让所有传递的整数的值都为 5。

我要问的是,如果可以的话,我能不能制作一个参数数量不固定的函数。

void setIntToFive(UNKNOWN AMOUNT OF INTS){
    //a for loop to assign a value to all the passed arguments
}

然后每次用不同数量的参数调用它

int a;
int b = 5;
setIntToFive(a,b);
int c;
setIntToFive(a,b,c);//Notice how i add another argument.

那么,除了将参数设为数组之外,有没有办法做到这一点。(我认为它不会那样工作)

【问题讨论】:

    标签: c++ function parameters arguments


    【解决方案1】:

    您可以使用variable arguments。

    基本上

    double average ( int num, ... )
    {
        va_list arguments;
        double sum = 0;
    
        va_start ( arguments, num );
        for ( int x = 0; x < num; x++ )
        sum += va_arg ( arguments, double );
        va_end ( arguments );
    
        return sum / num;
    }
    

    va_list 是一个保存所有传入参数的结构,va_start 将参数分配到该列表中。 va_end 在使用后清理列表。 num 是传递的参数数量。

    Check out the MSDN for more info.

    【讨论】:

    • 这至少需要他传递指针并使用一些终止参数或参数计数。所以你可以完成这项工作:setIntToFive(&amp;a, &amp;b, nullptr); 或 setInToFive(&amp;a, &amp;b, &amp;c, nullptr)。
    • 不,可变参数可以更简单。看我的解释。
    • 那么,在我传递了 num 之后,我可以向函数传递 num 更多的参数吗?当我调用 va_arg 时,它是否返回 int num 之后的下一个传递的参数?
    • 是的,num 表示有多少个参数代替 ... 并且 va_arg 返回列表中指定类型的下一个参数。我会更新更多链接。
    猜你喜欢
    • 2011-01-26
    • 2011-12-24
    • 2018-05-11
    • 1970-01-01
    • 1970-01-01
    • 2021-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多