c - 如何存储函数的全局值?

标签 c pointers

在我的函数中,我计算了两个不同的值(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 和 Eart 的指针。在函数中使用它们时,您可以使用解引用运算符。然后你可以像这样调用ConPI:

float Target, Value, Esum, Ealt;
...
ConPi(Target, Value, &Esum, &Ealt);

现在,每次您调用 ConPi 时,Esum 和 Eatt 都会更新。

关于c - 如何存储函数的全局值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52977469/

相关文章:

c - 将 uint16_t var 打印到 4 个位置的函数将不起作用

C - 使用函数填充(获取)数据。最好通过引用或复制(在微 Controller 环境中)?

c - 使用 fclose() 时出错

c - C 中半已知输入的指针与数组

c - 获取ubuntu存储大小下的时间

c++ - #include <文件名> 和 #include "filename"之间有什么区别?

pointers - Nil指针取消引用尝试将指针复制到指针

c++ - typedef 类型和相同类型的指针的正确方法是什么?

c - 访问带下标的 long long int 指针

C语言: char array issues and warnings by eclipse