C 为什么while循环会执行多次?
我在面试中遇到了一个问题,我必须找出下面代码的输出。我试过了,但不正确。请解释以下代码C 为什么while循环会执行多次?,c,C,我在面试中遇到了一个问题,我必须找出下面代码的输出。我试过了,但不正确。请解释以下代码 #include<stdio.h> int main() { int x=0,a; while(x++ < 5) { a=x; printf("a = %d \n",a); static int x=3; printf("x = %d \n",x); x+=2; } ret
#include<stdio.h>
int main()
{
int x=0,a;
while(x++ < 5)
{
a=x;
printf("a = %d \n",a);
static int x=3;
printf("x = %d \n",x);
x+=2;
}
return 0;
}
有人能解释一下这里发生了什么吗?循环条件表达式
x++<5
使用循环外声明的x
。语句x+=2代码>不影响循环外声明的x
,因为静态int x=3代码>隐藏先前的x
声明
换句话说,在语句static int x=3之后对x
的所有修改代码>不影响循环控制表达式中使用的x
这相当于:
int x=0,a;
int y=3;
while(x++ < 5)
{
a=x;
printf("a = %d \n",a);
printf("x = %d \n",y);
y+=2;
}
intx=0,a;
int y=3;
而(x++<5)
{
a=x;
printf(“a=%d\n”,a);
printf(“x=%d\n”,y);
y+=2;
}
第二个x
隐藏了第一个x
,这是因为x++
返回x
的当前值,然后递增
在第一次迭代中
while(x++ < 5)
影响静态x
,而不影响外部x。循环中声明的变量x
,因为它是静态的
,只要程序存在就存在,一旦超出范围就不会丢失。它将被初始化为3,并在循环的每次迭代中添加2。如果在循环体的最后三行重命名静态内部变量x
,您应该可以更清楚地看到发生了什么。我删除了静态变量,即使循环执行了5次,请参见@SatishPatel,static
或not,x
在循环中阴影外部x
@SatishPatel;它与静态
无关。循环中x
的重新声明将隐藏其以前的所有声明。当两个x都在同一代码段中时,编译器如何将静态int x
与外部int x
区分开来?在C中,符号的范围从它的“声明器”(在“=”字符后面)开始。它以复合语句结尾(“}”字符)。因此,第二个x
仅在循环体的最后三行中可见。所有其他x
均指第一个变量。“这相当于…”-除非运行函数两次(静态对象不会再次初始化)。虽然main
不太可能。@NikolaiRuhe是的,但我们可以在这里将y
限定为static
,但由于在这种特定情况下它没有添加任何内容,所以我宁愿将其删除。
while(x++ < 5)
while(0 < 5)
x+=2;