在for循环中放置一个迭代器,在c

问题描述 投票:0回答:1

当阴影

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;
c loops for-loop scope shadowing
1个回答
0
投票
i

)。 可以找到更多的东西。

后,您访问此
i
会导致ub(

nunnefine-behavior
),这意味着您看到的任何结果都是有效的。
    

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.