我在学习c,变量声明在循环中[已关闭]

j9per5c4  于 2022-12-11  发布在  其他
关注(0)|答案(2)|浏览(164)

已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题吗?**通过editing this post添加详细信息并阐明问题。

5天前关闭。
Improve this question

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

在这种情况下,不是有三个变量同名吗?
由于全局变量和局部变量,在括号中声明为局部变量,所以我认为声明为局部变量的变量在括号结束时消失。但我不确定
我想知道确切的原因

2ledvvac

2ledvvac1#

让我们一步一步地走。例如,代码:

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

首先在循环之前将总计数初始化为0;
然后在循环开始时初始化int i = 0;所以i在这里是0,其他的条件都不重要了.
你在循环里面。你在循环里面初始化count = 0。在{}括号之间。这很重要。
现在增加两个计数(我不会增加i,因为它在循环中增加。你可以这样做,但它会弄乱我的例子)
您的整体计数和本地计数都是1。i仍然是0;
现在让我们进行第二次迭代。代码再次跳转到for declaration。i已经声明,所以在那里没有什么要做的,它不会再次初始化。检查下一个条件,i是0,所以i〈=3 =true,我们可以继续。现在它会增加i(你可以加上i--也可以减少或i = i+1000)
让我们回到循环体。你将再次初始化localCount。旧的一个被忘记了,因为你之前离开了循环体。所以localCount在这里又是0,在下一行你将把它增加到1。
另一方面,overalCount被声明为BEFORE循环,所以它仍然存在,所以你可以在这里把它从1增加到2。
您将执行此循环,直到您的i不等于4,因此您的条件i〈=3失败,您将退出循环。在您退出循环后,localCount和i将被遗忘。
P.S.您可以预先声明i,并初始化循环,如

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

循环后不会忘记你的i

kulphzqa

kulphzqa2#

代码中仅有的两个变量是icount,两个局部变量。i变量的生存期在您退出for循环时结束。在for子句中声明的所有变量都将生存到for完成。count变量的生存期在循环的每次迭代时结束。在代码块中声明的所有变量(由{}分隔)将在块的末尾被释放。因此在循环的末尾释放变量count,并在循环的开头创建另一个变量(编译器实际上不会这样做,也不会重用内存,但这与此处无关)。

相关问题