2

我正在编写一个方法,它接受一个数字 n 和 n 个整数(一个变量数),这个函数将返回不包括 n 的整数的总和。我被困在如何单独访问每个参数上。这是我到目前为止所拥有的,我在网上阅读了它,希望我走在正确的轨道上。在网上找到的似乎有用的方法是:

va_start()
va_arg()
va_end()


int sumv(int n, ...)
{
  va_list list;
  int sum = 0;
  while(n>0)
  {
    //*********************
    //this is the part where I am stuck on, how do I get each paramater?
    //I know it will be an int
    //*********************
    n--;
  }
  return sum;
}
4

2 回答 2

5

It should look something like this:

int sumv(int n, ...)
{
  va_list list;
  va_start(list, n);
  int sum = 0;
  while(n>0)
  {
    sum += va_arg(list, int);
    n--;
  }
  va_end(list);
  return sum;
}
于 2013-04-29T03:19:55.197 回答
0

你基本上是在寻找这个:

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

int sumv (int n, ...) {
    va_list list;

    int sum = 0;

    va_start (list, n);
    while (n-- > 0)
        sum += va_arg (list, int);
    va_end (list);

    return sum;
}

int main (void) {
    printf ("%d\n", sumv (5, 1, 2, 3, 4, 5));
    return 0;
}

这将打印前五个自然数的总和,15

基本思想是va_start,在变量参数开始之前给出要使用的列表和函数中的最后一个参数。

然后,每次调用va_arg都会为您提供指定类型的下一个参数(int此处)。此特定代码根据您的计数器调用它,但您同样可以在末尾使用标记值,例如负数,前提是负数在参数中无效。

然后,处理完所有参数后,使用va_end终止处理。

于 2013-04-29T03:38:39.890 回答