2016-04-23 42 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

谢谢。我知道了 –