为什么以下代码没有给出错误,因为 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++;
}
}
为什么以下代码没有给出错误,因为 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++;
}
}
在代码块中定义的变量范围仅限于该代码块。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 的值
int i=10;
infor loop
仅在循环内可用,它不知道它是否先前在循环外定义。
自动变量仅在它们所在的范围{
内有效。
您的程序中有两个变量:}
i
i
声明的 inmain
具有整个main
函数的范围。i
内部for
仅在循环内部具有范围。 请注意,当您i
在 for 循环中引用时,内部i
阴影会i
在main
.
这是因为变量的范围
变量范围在 { to }
你的第一个 int i 将在 main() 中存活,而 int i inside for 将仅在 for 循环中存活。
现在为什么输出是 1010101010???
简单的解释是,当您输入查找时,您的新 i 将等于 10,您打印它,然后 i++ 将其设为 11。下次 i = 10 时再次打印它,i++ 将其设为 11,这对于 main() int i < 5 所以五次你会得到 1010101010。
希望能帮助到你.....