2012-12-12 111 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.

希望它可以幫助.....