2012-12-12 76 views
-1

为什么下面的代码没有提供错误,因为我多次定义为int i = 10?此外,为什么我的迭代变量不受影响?为什么没有冲突?输出是1010101010.怎么样?变量的多重定义

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

回答

0

自动变量只有在范围{,其中}他们居住活着。
你在你的程序命名为i两个变量:

  • imain宣称拥有整个main功能的范围。
  • for循环内的i仅在循环内有作用域。

注意,当您参考i里面的for循环内i影子在main宣布i

+0

怎么样的输出?为什么是1010101010? –

+0

@PrithviRaj,你增加内部'i'然后它被破坏并重新创建下一次迭代。因此,印刷的“i”全部是五次。 – chris

+0

@PrithviRaj:在for循环中,编译器只能看到循环内声明的'i'。 –

0

int i=10;for loop只在循环内部可用,它不知道它是否先前在循环外定义。

0

代码块中定义的变量范围仅限于该块。 即,

int i=1;//outer i 
{ 
int i=2;//inner i 
printf("%d"&i);// this ll print 2 
} 
printf("%d"&i);// this ll print 1 

同在过,即

int i=1; 
for (int i=0;i<4;i++){ 
printf("%d",&i); // print 0 1 2 3 
} 
printf("%d",&i); // print 1 

你的情况,你每次初始化内我到10和打印,那么你增加内我,所以每次打印值时间内我的,你声明并初始化到10

0

这是因为可变的变量

范围范围内处于向{}

你的第一个int我将通过main()而活着,而int里面的for只会在for循环中存在。

现在为什么输出是1010101010 ???

简单的解释是当你输入看你的新我会等于10,你打印它然后我++使它11.再次下一次我= 10你打印它,我++使它11这继续为主)INT I < 5这样的五倍,你会得到1010101010.

希望它可以帮助.....