为什么while循环被执行多次?

时间:2015-01-03 14:52:19

标签: 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;
    }
    return 0;
}

输出:

a = 1
x = 3
a = 2
x = 5
a = 3
x = 7
a = 4
x = 9
a = 5
x = 11

任何人都可以解释一下这里发生的事情吗?

3 个答案:

答案 0 :(得分:2)

循环条件表达式x++ < 5使用循环外声明的x。语句x += 2;不影响在循环外声明的x,因为static int x=3;隐藏了先前的x声明。

换句话说,语句x之后对static int x=3;的所有修改都不会影响循环控制表达式中使用的x

答案 1 :(得分:2)

这是因为x++返回x的当前值,然后递增。

在第一次迭代中,

while(x++ < 5)

相同
while(0 < 5)

然后,在检查条件后,x将递增。因此a的值是x的递增值。 static x,阴影(隐藏)在循环外声明的x,因此,

x+=2;

会影响static x,而不影响外部x。在循环中声明的变量static,因为它是{{1}}只要程序存在就会存在,并且一旦超出范围就不会丢失。它将被初始化为3,并且在循环的每次迭代中都会添加它。

答案 2 :(得分:1)

这相当于:

int x=0,a;
int y=3;
while(x++ < 5)
{
    a=x;
    printf("a = %d \n",a);
    printf("x = %d \n",y);
    y+=2;
}

第二个x隐藏了第一个x

相关问题