循环和外循环中c的可变重新声明?

时间:2015-11-21 10:39:18

标签: c variables for-loop redeclaration

当变量被声明两次并且在for循环中声明变量时,变量范围是什么。

3 个答案:

答案 0 :(得分:1)

这是因为声明的变量的范围仅在您声明她的代码块内。在街区之外没有看到它。

我现在已经看到了你的代码。在1.代码中,你宣布两个具有相同名称的int是不允许的,并且在2.代码中你声明了两个具有不同名称的int,所以它&#39很好。

答案 1 :(得分:0)

为了理解您的问题,也称为变量的范围,让我们看看以下示例程序:

#include <stdio.h> 

int main(int argc, char *argv[])
{
    int I = -1;
    for (int I = 0; I < 3; I++) {
        printf("%d\n", I);
    }
    printf("%d\n", I);
    {
        int I = 200;
        printf("%d\n", I);
    }
    return 0;
}

如你所见,我将变量I声明了三次。

当声明为循环时,结果将是打印以下值:

0
1
2

在for循环之后,当我再次打印I变量时,我引用在for循环外声明的变量,我声明的第一个变量,结果将是:

-1

现在,如果我用花括号打开一个新的范围,我声明一个名称相同但值不同的新变量,我会得到:

200

我希望我对变量范围的描述现在很清楚

答案 2 :(得分:0)

第一个main尝试使用相同的标识符定义两个变量。这显然是被禁止的,并导致编译错误。

第二个main包含for - 循环。 for - 循环引入了新的范围,如果没有添加花括号,则只包含下一个语句或定义(即int i;)。 每次迭代都会为i分配解除分配,因此它一次只存在一次。所有定义的i都在不同的范围中。因此没有命名冲突。

如果外部范围中的变量(即main的函数范围)和内部范围中的变量(即{{ {1}} - loop),来自内部范围的变量隐藏来自外部范围的变量,从而使外部范围变量无法访问。

C11标准说,§6.2.1.4:

  

在内部范围内,标识符指定声明的实体   在内部范围;在外部范围内声明的实体是隐藏的   (并且不可见)在内部范围内。