For 语句中变量的范围

编程调试过程中发现一个比较诡异的事情。在For语句中的循环变量的作用范围有一些特殊的规则。为此进行了一系列的试验:

include

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

输出结果如下:


output1.png

在程序中for语句的循环变量在整个程序中有效。
将程序做如下修改:

include

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

重新调试运行结果如下:


output2.png

在第二个程序中i在循环体中定义了一下,让i只在For语句内部递增 ,而外面的变量i保持不变。

这样的好处是, 在for循环中选择循环变量是可以不用考虑这个变量的标识符是否已经使用过了。
坏处是: 如果在循环体之外还需要使用循环变量的话,则尽量不要在fo循环体内部进行定义。

拿while循环也实验了一下。

  1. 在判断语句中使用的变量是没有机会进行定义的(还不会在判断语句中进行类型声明)。
  2. 可以在循环体内定义与循环体外面相同的变量。但是不能带出循环体。这一点上是和for循环一致的。

结论

在循环体内可以定义循环体内部使用的变量,与主程序标识符可以相同。作用域只在循环体内有效。

你可能感兴趣的:(For 语句中变量的范围)