参数数量可变的 C 函数 returns 使用较少数量的参数调用时出现意外输出

C function with variable number of arguments returns unexpected output when called with fewer number of arguments

我正在学习 C,我创建了一个简单的 addNumbers(int num, ...) 函数,它接受任意数量的 int 参数,returns 它们的总和。

这个问题是当我得到addNumbers(4, 2)的输出时,输出的是14823901。这显然是不正确的。

当我调用函数addNumbers(4, 2, 4, 7, 10)时,它输出23,这也是不正确的,因为它应该是27,但至少它更接近。

这是我的代码:

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

// Functions with variable number of arguments
int addNumbers(int num, ...)
{
    int i;
    int sum = 0;

    // List to hold variable amount of parameters
    va_list parameters;

    // Initialize "parameters" list with arguments
    va_start(parameters, num);

    for(i = 0; i < num; i++)
    {
        // Adds each "int" argument from "parameters" to sum
        sum += va_arg(parameters, int);
    }

    // Cleans memory
    va_end(parameters);

    return sum;
}

int main()
{
    printf("%i", addNumbers(4, 2, 4, 7, 10));
    return 0;
}

我不应该使用 va_listva_arg 等...吗?

能够接受可变数量参数的最佳方法是什么?

for addNumber(4, 2) 你正在使用第一个参数作为计数器,其中有 4 个参数要加起来,但你只给了 1,所以 for 循环继续从内存中读取期望更多的参数,然后选择 ramdom值并将它们相加。