当阴影
i
for循环内部时,以下代码
#include <stdio.h>
int main()
{
for (int i = 1; i < 5; i++) {
printf("%d", i);
int i = i;
printf("%d ", i);
}
}
输出
10 20 30 40
从我对阴影的理解,应该有一个新的i
以等于上一个的值创建。这意味着我期望的输出将是
i
furthermore,如果您增加了代码,代码似乎存储了新的11 22 33 44
值。
i
this thisOutputs
#include <stdio.h>
int main()
{
for (int i = 1; i < 5; i++) {
printf("%d", i);
int i = i + 2;
printf("%d ", i);
}
}
看来,并没有重新编写所有迭代 - 它的工作方式就像一个最初是
12 24 36 48
然后增加了每次迭代的变量。
在这里实际发生了什么?您如何预测行为?
语句类似:
i
是合法的,但与您的期望不同,它将试图将0
分配给自己(而不是从
int i = i;
i
)。 可以找到更多的东西。
后,您访问此i
会导致ub(nunnefine-behavior
),这意味着您看到的任何结果都是有效的。