在 C 中更新全局变量

use*_*382 4 c scope

我有一个初学者 C 问题。我想在下面的代码...

include <stdio.h>

void iprint();
int i=0;

int main()
{
  int j;

  for (j=0; j<50; j++)
    {
      iprint(i);
      printf("%d\n",i);
    }
}

void iprint(i)
{
  i +=1;
  //printf("%d\n",i); 
}
Run Code Online (Sandbox Code Playgroud)

...每次调用时更新 i 值的函数“iprint”,例如更新 i 以便它可以在 main 中使用,值为 1 用于迭代 2,值为 3 用于迭代 2 等。

我通过将代码更改为:

 include <stdio.h>

int iprint();
int i=0;

int main()
{
  int j;

  for (j=0; j<50; j++)
    {
      i= iprint(i);
      printf("%d\n",i);
    }
}

int iprint(i)
{
  i +=1;
  //printf("%d\n",i); 
  return(i);
}
Run Code Online (Sandbox Code Playgroud)

我必须返回(i)才能实现吗?问的原因是,如果我有很多使用 i 的函数,那么在它们之间传递 i 有点烦人。相反,如果你能以某种方式更新我,就像你在 matlab 中更新一个全局变量一样,那就太好了。是否可以?

小智 6

使用指针指向全局变量。更改指针值。就是这样


Som*_*ude 5

第一个问题是您将变量作为参数传递给函数,因此当函数修改变量时,它仅修改其自己的本地副本,而不是全局变量。也就是说,局部变量i 隐藏全局变量i

更不用说您实际上没有正确声明参数,因此您的程序甚至不应该编译。