我在访谈中遇到了一个问题,我必须找出以下代码的输出。我试过但不正确。请解释以下代码。
#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
任何人都可以解释一下这里发生的事情吗?
答案 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
。