2

我正在学习C。为什么上面的静态变量没有增加1

#include <stdio.h>

int foo()
{
  static int a = 0;
  return a+1; 
}

int main()
{
  int i;
  for (i = 0; i < 10; i = foo())
    printf("%d\n", i);
  return 0;
}

这段代码的错误在哪里?

4

4 回答 4

5

因为您没有将任何内容存储回其中。这应该适合你:

int foo()
{
  static int a = 0;
  return ++a; 
}

这里的return ++a意思是a = a + 1,即先增加a,然后返回它的值。a+1评估为1但不将任何内容存储回a

于 2013-10-08T11:29:43.650 回答
0

您永远不会为“a”变量赋值。您只是从例程中返回 a+1 的值。

于 2013-10-08T11:29:29.697 回答
0

以下将起作用:

#include <stdio.h>

int foo()
{
    static int a = 0;
    a++;
    return a;
}
于 2013-10-08T11:52:31.637 回答
0

当您返回 a+1 时,这是一个无限循环。每次它会返回 0+1 并且你的 a 值没有得到更新。根据您在循环中的条件,循环无限运行,直到发生超时。在这里试试这个 a 的值是在每个函数调用中不断更新。

int foo()
{
    static int a = 0;
    a++;
    return a;
}
于 2013-10-08T11:58:55.987 回答