在我的函数中,我计算了两个我们要全局(在函数外)的值(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都会更新。

08-17 05:50