在C中更新全局变量

时间:2013-09-23 10:09:14

标签: 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); 
}

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

我通过将代码更改为:

来完成此操作
 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);
}

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

5 个答案:

答案 0 :(得分:4)

使用指针指向全局变量。更改指针值。多数民众赞成

答案 1 :(得分:3)

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

更不用说你实际上没有正确地声明参数,所以你的程序甚至不应该编译。

答案 2 :(得分:0)

您不需要将全局变量作为参数传递。 如果声明一个与全局变量同名的参数或局部变量,您将hide the global variable

include <stdio.h>

void iprint();
int i=0;

int main()
{
  int j;

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

void iprint()
{
  i +=1;  /* No local variable i is defined, so i refers to the global variable.
  //printf("%d\n",i); 
}

答案 3 :(得分:0)

你可以在main函数本身增加i的值。 顺便说一下,将功能更改为

int iprint(int i){
/*you have to mention the type of arguemnt and yes you have to return i, since i  
variable in this function is local vaiable when you increment this i the value of  
global variable i does not change.
*/
return i+1;
}

陈述

i=iprint(i); //this line updates the value of global i in main function

这种情况就是这样,因为你通过“按值传递”方法传递函数值,其中包含变量的副本。当您递增i iprint方法时,全局变量i的副本会递增。全局变量保持不变。

答案 4 :(得分:0)

必须尝试此代码

#include <stdio.h>
int i=0;
void iprint()
{
  i =i+1;
  //printf("%d\n",i); 
}
int main()
{
    int j;
    for (j=0; j<50; j++)
    {
      iprint();
      printf("%d\n",i);
    }
}