首页 > 解决方案 > 为什么从循环中重新声明 C 变量不会影响循环?

问题描述

来自这个问题,为什么这个循环仍然运行 5 次?

for(int i = 0; i < 5; i++)
{
    int i = 10;  
    printf("%d\n", i); 
}   

我猜想当我们重新声明i时,当i在 -loop 中被评估时for,它会在第一个循环之后停止循环。这就像我们刚刚重新分配i = 10;. 但是,就好像正在创建一个新变量,但循环仍然使用前一个变量。这是如何以及为什么会发生的?

标签: cfor-loopscope

解决方案


这是由于范围。每次使用大括号 {} 时,都会为程序生成一个新范围。一旦退出范围,在该范围中初始化的任何内容都将被删除,对于您来说,当它存在以检查循环条件时,这就是每个循环。

使用我刚才所说的,我们看到您正在重新初始化 i,int i = 10;这意味着您在此范围内创建了一个名为 i 的新变量,其值为 10。您只需编写即可获得所需的结果,i = 10;因为它首先会在变量的范围内查找,然后它将在上面的下一个范围内循环,它会在您的 for 循环中找到它。

编辑:

对此进一步评论,这意味着您可以为多个变量使用相同的名称,只要它们彼此位于不同的范围内。像这样:

#include <stdio.h>
int main()
{
    int x = 10;
    printf("x = %d\n",x); //check x value equals 10

    for(int i = 0; i < 10; i ++)
    {
        int x = i;
        printf("x = %d\n",x); //a new variable, also called x, now outputs x = i;
    }

    printf("x = %d\n",x); //check x value returns to the original when scope is left
    return 0;
}

推荐阅读