zmLau0727 发表于 2019-11-18 18:16:23

为什么我在已经定义了i的情况下还能在for语句中再定义一个i

#include <stdio.h>
int main()
{
        int i=0;
        for(;i<5;i++)
        {
               int i=1;
                printf("%d\n",i++);
       }
        printf("%d\n",i);
        return 0;
}
输出是1
1
1
1
1
5

zltzlt 发表于 2019-11-18 18:18:09

后定义的 i 覆盖了前面定义过的 i

zmLau0727 发表于 2019-11-18 18:19:48

zltzlt 发表于 2019-11-18 18:18
后定义的 i 覆盖了前面定义过的 i

但是for循环还是完整的执行了啊,而且执行完for循环i变成5,最后也输出了5啊

zltzlt 发表于 2019-11-18 18:23:50

zmLau0727 发表于 2019-11-18 18:19
但是for循环还是完整的执行了啊,而且执行完for循环i变成5,最后也输出了5啊

当然会完整执行,在 for 循环中定义的 i 覆盖了程序一开始定义的 i,最后输出的 i 是程序一开始定义的 i

jackz007 发表于 2019-11-18 18:44:20

本帖最后由 jackz007 于 2019-11-18 19:14 编辑

#include <stdio.h>
int main()
{
      int i=0;
      for(;i<5;i++)
      {
                int i=1;
                printf("%d\n",i++);
      }
      printf("%d\n",i);
      return 0;
}

       两个 i 的作用域不一样,后定义的 i 与前面定义的 i 是两个相互独立的同名局部变量,后定义的 i 的作用域仅限于 for 循环语句块的内部,外部 i 的改变与这个 i 无关,所以,循环中,尽管外层 i 在不断改变,可是,内层 i 却始终是 1。出了循环以后,程序脱离内层 i 的作用域,恢复到外层 i 的作用域。这时,作为局部变量,内层 i 自动消失。所以,print(i) 打印的是循环结束时的 i 值 5。

micolar 发表于 2019-11-18 19:32:51

#include <stdio.h>
int main()
{
      int i=0;
      for(;i<5;i++)
      {
               int i=1;
                printf("%d\n",i++);
         }
      printf("%d\n",i);
      return 0;
}
一班有个叫王老五一班的班主任叫王老五 老师点名点王老五是点学生开会的时候叫王老五是老师 差不多就这样
我知道你问的不是这个 两个在编译器是不同的变量 名字是给程序员看的
页: [1]
查看完整版本: 为什么我在已经定义了i的情况下还能在for语句中再定义一个i