1 c++ variables arguments function
所以我有一个任务是使用指针编写一个带有可变数量参数的函数“mult”。而这个函数必须计算浮点数的乘积。
我遵循了我们的大学给我们的指南,但我的产品仍然为零。我发现问题是要相乘的每个其他数字都是零。
#include <iostream>
using namespace std;
int mult(int k,...){
int* p = &k;
int m = 1;
for(; k != 0; k--){
m *= *(++p);
}
return m;
}
int main(){
float res1 = mult(11,45,10,9,8,7,6,5,4,3,2,2);
float res2 = mult(7,12,23,0.3,0.6,1,2);
float res3 = mult(3,0.6,-12,-0.9);
cout << "Your results are:\n"
<<res1<<"\n"
<<res2<<"\n"
<<res3<<"\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)

以下是指南中的示例:
void Print_stor(int k, ...)
{
int n=k;
int a[n];
int *p = &k;
for ( ; k!=0;k--)
a[k-1]=*(++p);
for(int i=n-1; i>=0; i--)
printf("%i ", a[i]);
printf("\n");
}
int sum(int k, …)
{
int *p = &k;
int s=0;
for ( ; k!=0; k--)
s+=*(++p);
return s;
Run Code Online (Sandbox Code Playgroud)
您可以编写mult为可变参数函数,并使用std::accumulatewithstd::multiplies作为运算符。
#include <functional>
#include <initializer_list>
#include <iostream>
#include <numeric>
template<typename T, typename... Args>
T mult(T t, Args... args)
{
std::initializer_list<T> values{args...};
return std::accumulate(values.begin(), values.end(), t, std::multiplies<T>());
}
int main()
{
std::cout << mult<float>(11,45,10,9,8,7,6,5,4,3,2,2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出
3.59251e+09
Run Code Online (Sandbox Code Playgroud)