【问题标题】:I'm learning c, variable declaration in loop我正在学习c,循环中的变量声明
【发布时间】:2022-12-05 22:33:52
【问题描述】:
for(int i = 0;i<=3;i++){
    int count = 0;
    /*...*/
}

在这个情况下 不是有3个同名的变量吗?

由于全局变量和局部变量,在括号中声明为局部变量,所以我认为声明为局部变量的变量在括号结束时就消失了。 但我不确定

我想知道具体原因

【问题讨论】:

  • 这里没有全局变量。有 2 个具有不同名称的局部变量。
  • 您的代码 sn-ps 仅包含 2 个变量,它们的名称都不同。你指的是什么全局变量和局部变量?
  • 除此之外,你是对的,局部变量 icount 在该循环之后都不可见。
  • 我很好奇的是为什么循环会在迭代时创建多个同名变量,这是可能的。
  • 这些是分号,不是逗号。 for 循环创建一个名为 i 的变量,而不是 3。

标签: c


【解决方案1】:

代码中仅有的两个变量是 i 和 count,它们都是局部变量。 i 变量的生命周期在您退出 for 循环时结束。 for 子句中声明的所有变量将一直存在,直到 for 结束。 计数变量的生命周期以循环的每次迭代结束。在代码块(由 {} 分隔)内声明的所有变量都将在代码块结束时释放。所以在循环结束时,变量 count 被释放,另一个在循环开始时被创建(编译器实际上不会这样做并重用内存,但这与这里无关)。

【讨论】:

  • 谢谢!这很有帮助
  • edit你的答案并以更容易阅读的方式格式化。对代码 sn-ps、关键字、变量名等使用代码格式。参见stackoverflow.com/editing-help
【解决方案2】:

让我们一步一步来。例如拿代码:

int overalCount = 0;
for(int i = 0;i<=3;i++){
   int localCount = 0;
   localCount ++;
   overalCount ++;
   printf("%d
",i);
   printf("%d
",localCount);
   printf("%d
",overalCount);
}

首先将循环前的总计数初始化为 0;

然后在开始循环时初始化 int i = 0;所以我在这里是0。其他条件现在无关紧要。

而你在循环中。您在循环内初始化 count = 0。在 {} 括号之间。这很重要。

现在增加两个计数(我不会增加 i,因为它是在循环中增加的。你可以这样做,但它会弄乱我的例子)

你的总计数和局部计数都是 1。 i 仍然是 0;

现在让我们进行第二次迭代。代码再次跳回声明。 i 已经被声明了,所以在那里没什么可做的,它不会被再次初始化。检查下一个条件,i 为 0,因此 i<=3 =true,我们可以更进一步。现在它将增加 i(您可以添加 i-- 也可以减少或 i = i+1000)

让我们回到循环体。您将再次初始化 localCount。旧的被遗忘,因为你以前离开过身体。所以 localCount 在这里又是 0,在下一行你将它增加到 1。

另一方面,overalCount 是在循环之前声明的,所以它仍然存在,所以你可以在这里将它从 1 增加到 2。

您将进行此循环,直到您的 i 不等于 4,因此您的条件 i<=3 失败并且您将离开循环。离开循环后,localCount 和 i 将被遗忘。

附言您可以提前声明 i 并初始化循环

int i = 0;
for(i; i<=3; i++) {
   /* whatever */
}

你的 i 不会在循环后被遗忘

【讨论】:

    猜你喜欢
    • 2011-12-23
    • 2018-04-07
    • 1970-01-01
    • 1970-01-01
    • 2016-06-07
    • 1970-01-01
    • 2012-02-02
    相关资源
    最近更新 更多