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);
最佳答案
在 foo 循环内部,您定义了一个同名的变量 FOO
,这将遮蔽外部的 FOO
,这意味着 FOO
您在循环中使用的只是该 block 的本地变量。最终的 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);
关于c - 函数使用的局部限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36806525/