docs(variable): edif variable scope

This commit is contained in:
ruanyf
2021-09-27 13:39:38 +08:00
parent 23c7ca6970
commit e731600acb

View File

@@ -167,16 +167,3 @@ printf("%d\n", i); // 出错
上面示例中,`for`循环省略了大括号,但依然是一个块作用域,在外部读取循环变量`i`,编译器就会报错。
比较特殊的是,`for`的循环条件部分是一个单独的作用域,跟循环体内部不是同一个作用域。
```c
for (int i = 0; i < 5; i++) {
int i = 999;
printf("%d\n", i);
}
printf("%d\n", i); // 非法
```
上面示例中,`for`的循环变量是`i`,循环体内部也声明了一个变量`i`,会优先读取。但由于循环条件部分是一个单独的作用域,所以循环体内部的`i`不会修改掉循环变量`i`因此这段代码的运行结果就是打印5次`999`。另外,一旦`for`循环结束,循环变量`i`的作用域就消失了,变量不再存在,所以最后一行读取变量`i`就报错了。