C编程中的变量范围

Kin*_*dle 2 c scope

在c中,当这个代码块运行时,它输出10 10 10 10 10.我认为循环应该在第一次执行后退出,因为我变为11但它没有发生.为什么会这样?

#include<stdio.h>
int main()
{
  int i; 
  for(i=0;i<5;i++)
  {
     int i=10;  
     printf("%d\t",i);
     i++;
  }
  return;
}
Run Code Online (Sandbox Code Playgroud)

但是当程序编写如下时,输出类似于我的想法(即10).上面代码和下面显示的代码之间的确切区别是什么?C如何处理这些变量?如果有人解释这个,我会很高兴.

#include<stdio.h>
int main()
{
  int i; 
  for(i=0;i<5;i++)
  {
     i=10;  
     printf("%d\t",i);
     i++;
  }
  return;
}
Run Code Online (Sandbox Code Playgroud)

hac*_*cks 5

在你的第一个程序中,for循环使用i声明的外部for来控制循环.该printf用途i的内声明的for循环输出值和这个i有块作用域.

ifor 的新声明loop暂时隐藏旧声明.现在的价值i10.在的端for环块的新i不程序可见和可变恢复其旧的意义和此时i存储的值作为每循环的迭代(或者1,2,34).