5

我有一个初学者 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); 
}

...每次调用函数“iprint”来更新 i 的值,例如更新 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 中更新全局变量一样,那就太好了。可能吗?

4

5 回答 5

5

使用指针指向全局变量。更改指针值。而已

于 2016-04-20T00:37:47.447 回答
4

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

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

于 2013-09-23T10:11:50.763 回答
2

您不需要将全局变量作为参数传递。如果您声明与全局变量同名的参数或局部变量,您将隐藏全局变量

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); 
}
于 2013-09-23T10:17:52.537 回答
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 方法副本时,会增加。全局变量保持不变。

于 2013-09-23T10:31:03.597 回答
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);
    }
}
于 2019-02-06T13:34:17.100 回答