我是c ++的新手。我必须通过公式计算一个值,并在每次调用函数时存储该值。我创建了一个大小为10的数组,并计算了myValue然后尝试存储该值。这是正确的方法吗?它是否会以每次调用函数时的方式工作,它将计算并存储myValue并在下一次调用中使用该值n [i-1]来计算我的值n [i]。让我们在第一次调用中说myvalue为0.5。在下一次调用中,它将是myValue =(1-0.3)* 0.5。它会将所有10个值存储在10个调用中,并使用最后存储的值来计算myValue。当我编译它时,它没有向我显示任何错误,但我仍然怀疑。
static double
CalculatemyValue(Node* ch)
{
float gamma=0.3;
double myValue = 0.0;
int n[10];
int i = 0;
n[i] = myValue;
myValue = ((1-gamma)*n[i-1]) //previous value
return myValue;
}
答案 0 :(得分:1)
在给定的代码中
static double
CalculatemyValue(Node* ch)
{
float gamma=0.3;
double myValue = 0.0;
int n[10];
int i = 0;
n[i] = myValue;
myValue = ((1-gamma)*n[i-1]) //previous value
return myValue;
}
...数组n
是一个本地自动变量。每次执行到达声明时都会重新创建,并在执行离开块时销毁。呼叫之间不保留任何信息。
在调用之间保持状态的一种好方法是使函数成为类的成员函数,其数据成员构成您要保留的状态,例如:像这样:
class Power_sequence
{
private:
double gamma_;
double value_;
public:
auto gamma() const -> double { return gamma_; }
void advance() { value_ *= 1 - gamma_; }
auto current() const -> double { return value_; }
auto next()
-> double
{
double const result = current();
advance();
return result;
}
Power_sequence( double const gamma = 0.3 )
: gamma_( gamma )
, value_( 1.0 )
{}
};
...你可以这样使用:
Power_sequence seq;
for( int i = 1; i <= 42; ++i )
{
cout << seq.next() << endl;
}
免责声明:以上代码未经编译器检查。
另一种方法是将状态作为函数的显式参数传递。