-1

为什么以下代码没有给出错误,因为 i 被多次定义为 int i=10?此外,为什么迭代变量 i 不受影响?为什么没有冲突?输出为 1010101010。如何?

#include<stdio.h>
int main()
{
    int i;
    for(i=0;i<5;i++)
    {
        int i=10;
        printf("%d",i);
        i++;
    }
}
4

4 回答 4

0

在代码块中定义的变量范围仅限于该代码块。IE。,

int i=1;//outer i
{
int i=2;//inner i
printf("%d"&i);// this ll print 2
}
printf("%d"&i);// this ll print 1

也一样。,即

int i=1;
for (int i=0;i<4;i++){
printf("%d",&i); // print 0 1 2 3 
}
printf("%d",&i); // print 1

在您的情况下,每次将内部 i 初始化为 10 并打印它时,您都会增加内部 i,因此它每次都会打印您声明并初始化为 10 的内部 i 的值

于 2012-12-12T05:59:59.783 回答
0

int i=10;infor loop仅在循环内可用,它不知道它是否先前在循环外定义。

于 2012-12-12T05:58:59.187 回答
0

自动变量仅在它们所在的范围{内有效。 您的程序中有两个变量:}
i

  • i声明的 inmain具有整个main函数的范围。
  • 而循环i内部for仅在循环内部具有范围。

请注意,当您i在 for 循环中引用时,内部i 阴影imain.

于 2012-12-12T05:56:03.137 回答
0

这是因为变量的范围

变量范围在 { to }

你的第一个 int i 将在 main() 中存活,而 int i inside for 将仅在 for 循环中存活。

现在为什么输出是 1010101010???

简单的解释是,当您输入查找时,您的新 i 将等于 10,您打印它,然后 i++ 将其设为 11。下次 i = 10 时再次打印它,i++ 将其设为 11,这对于 main() int i < 5 所以五次你会得到 1010101010。

希望能帮助到你.....

于 2012-12-12T07:29:31.373 回答