在我的函数中,我计算了两个我们要全局(在函数外)的值(Esum和Eold)。
我想使用指针来存储值,但是我不习惯这种技术。
这是我的函数的样子,但是无法全局存储值。...不全局存储Esum和Eold ...不好!
float Eold = 0.0f;
float Esum = 0.0f;
void ConPI(float Target, float Value, float Esum, float Eold){
E = Target - Value;
Esum = Esum + E;
Eold = E;
}
现在,我正在寻找一种使用Esum和Eold指针存储全局值的解决方案。我不习惯使用指针并且需要帮助我的函数:
void ConPI(float Target, float Value, float Esum, float Eold, float *p, float *q){
E = Target - Value;
Esum = Esum + E;
p = &Esum;
Eold = E;
q = &Eold;
}
这实际上是行不通的。退出功能Eold和Esum后,将变为0.000....。
也许有人可以帮助我了解为什么会这样。
非常感谢 !
最佳答案
您应该根据第一个函数定义执行以下操作:
void ConPI(float Target, float Value, float *Esum, float *Ealt){
E = Target - Value;
*Esum = *Esum + E;
*Ealt = E;
}
这样,您可以传递指向Esum和Ealt的指针。并且在函数中使用它们时,可以使用解引用运算符。然后,您可以像这样调用
ConPI
:float Target, Value, Esum, Ealt;
...
ConPi(Target, Value, &Esum, &Ealt);
现在,每次调用ConPi时,Esum和Ealt都会更新。