C中可变数量的参数?

时间:2017-06-21 08:34:28

标签: c function arguments parameter-passing

我遇到了一个问题,即将可变数量的参数传递给C中的函数。 问题是这样的:

编写一个函数,该函数采用可变数量的参数来表示英语中的学生标记 并返回得分>的学生人数90分。 例如:variableArguments(3,20,90,98)返回1.一个值(98)大于90.

第一个参数是学生标记的编号(arg_count),后跟“arg_count”个参数。 例如:如果函数的第一个参数是5,则函数的参数总数将是6(1 + 5)。

int sampleAddFunction(const int& a, const int& b)
{
    int sum = a + b;
    cout << "sum = " << sum << endl;
    return(sum);
}

template<typename T, typename ... ARGS> T asyncExecutor(std::packaged_task<T(ARGS...)>&& package, ARGS ... args)
{
    std::future<T> result = package.get_future();
    std::thread task_td(std::move(package), args...); 
    task_td.join();
    return(result.get());
}

int main(int argc, char* argv[])
{
    std::packaged_task<int()> task(std::bind(sampleAddFunction, 10, 20));
    int testResult = asyncExecutor(std::move(task));
    cout << "testResult = " << testResult << endl;
    std::packaged_task<int(int,int)> task2(sampleAddFunction);
    int testResult2 = asyncExecutor(std::move(task2), 15, 27);
    cout << "testResult2 = " << testResult2 << endl;
}

例如:#include<stdarg.h> ..... ..... int variableArguments(int arg_count, ...){ //TODO ..... ..... return 0; }

int result=variableArguments(4,87,90,98,67);

结果值应为'1',因为参数数> 90是一个

在函数的原型中,第一个参数是 number of arguments =4 arguments=(87,90,98,67) 剩下的是参数表示为arg_count ...的含义是什么?

在这个函数中,给出...给出了在调用时我们需要传递给函数的传递的参数个数。 如果将这些参数传递给函数,如何访问函数定义中的参数列表?

3 个答案:

答案 0 :(得分:1)

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

return sum;
}

//call 
printf("%d\n", ff(3, 1, 2, 3));

va_list包含...中的参数列表,在循环中逐个访问va_arg(arguments,int);

答案 1 :(得分:0)

你可以这样写,这个程序将从接受变量no的函数返回最大值。参数:

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

int max(int arg_count, ...)
{
  int i;
  int max, a;

  va_list ap;
  va_start(ap, arg_count);

  max = va_arg(ap, int);

  for(i = 2; i <= arg_count; i++) {
    if((a = va_arg(ap, int)) > max)
      max = a;
  }

  va_end(ap);
  return max;
}

int main()
{
   int count = 5;


   printf("Max value is %d", max(count, 12, 67, 6, 7, 100));
   return 0;
}

答案 2 :(得分:-3)

rm