#include <stdio.h>
void main() {
int var = 99;
for (int var = 13; var == 13; var++) // Why not putting up a variable redeclaration error here ?
printf("Inside loop, var is = %d\n", var);
printf("Outside loop, var is = %d\n", var);
}
代码的输出是:
Inside loop, var is = 13
Outside loop, var is = 99
同样的困惑也适用于在main()
中声明和定义的函数。
int var = 99; // Outer scope
for(int var = 13; var == 13; var++) // More inner scope
它们处于不同范围。可以在更多内部作用域中声明变量,这些内部作用域与外部作用域中的变量具有相同的名称。在这种情况下,内部声明会“遮盖”外部声明。当内部var
在范围内时,var
将引用循环内的内部var
。内部var
超出范围后,var
将引用外部var
。
范围。如果变量位于不同的作用域内,则可以使用相同的名称定义变量。就像在单独的函数中命名变量var
一样。它仍然可以工作。
但是这是不安全的,最好使用不同的名称。
在每个作用域内,如果有两个具有相同名称的变量,则程序将使用在该作用域中定义的变量。]>
您的for循环定义了一个新范围。