2016-04-23 23 views
-5

什麼是在最後的答案FOO返回「0」的原因:局部功能的使用限制

int FOO = 0, bar = 0, i; 
for (i = 0; i < 4; i++) { 
    int FOO = i; 
    printf("%d ", FOO); 
    if (i % 2 == 0) 
     FOO += bar; 
    bar++; 
} 
printf("%d %d", FOO, bar); 
+1

您創建了兩個變量,都稱爲'FOO'。這不是一個好主意。 –

+0

https://en.wikipedia.org/wiki/Scope_(computer_science)#C – user3386109

回答

2

內foo的循環,你定義具有相同名稱FOO一個變量,這將影子在FOO外部,這意味着,您在循環中使用的FOO只是塊的局部變量。最後的printf在循環之外,所以它打印的FOO是一個駐留在外部範圍內的人。在這一點上,被遮蔽的FOO不再存在。 所以代碼可以這樣對待:

int FOO_out = 0, bar = 0, i; 
for (i = 0; i < 4; i++) { 
    int FOO_in = i; 
    printf("%d ", FOO_in); 
    if (i % 2 == 0) 
     FOO_in += bar; 
    bar++; 
} 
printf("%d %d", FOO_out, bar); 
+0

謝謝。我知道了 –