我遇到了一个问题,即将可变数量的参数传递给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
...
的含义是什么?
在这个函数中,给出...
给出了在调用时我们需要传递给函数的传递的参数个数。
如果将这些参数传递给函数,如何访问函数定义中的参数列表?
答案 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