C语言int x=1; f() {static int x=10; x+=++i

int x=1;
f()
{
static int i=2;int x=10;
x+=++i;
printf("%d",x);
}
main()
{ int i;
for(i=1;i<4;i++) {++x; f();}
printf("%d\n",x);
}
输出答案是13,14,15,4 怎么的来得 详细说下运行步骤

int x=1是全局变量,也就是主函数中输出与操作的都是这个x。
而f()中的 int x=10作用域只在f()函数本身中。
首先主函数执行for语句。
i=1 时,++x,使得x=2,调用f(), 在f()中x=10+3=13,输出:13,static int i是静态变量,所以i=3,
i=2 时,++x,使得x=3,调用f(),在f()中x=10+4=14,输出:14,static int i是静态变量,所以i=4,
i=3 时,++x,使得x=4,调用f(),在f()中x=10+5=15,输出:15,static int i是静态变量,所以i=5,
for循环执行完毕;
printf("%d\n",x); 输出:4
因此结果是:13,14,15,4追问

for语句不是先执行=1;i<4;然后执行++x;然后再到i++等这条件不成了后才执行下面的语句f()吗?

追答

for(i=1;i<4;i++)
{
++x;
f();
}

你看一下你的for语句是用大括号把 这两条语句都括起来了啊,所以肯定是执行一条++x之后,就要执行一次 f();
如果是:
for(i=1;i<4;i++) ++x;
f();

这样子就先执行完for循环,最后执行f();

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-12-26

从main()

开始

i=1<4

main()中x自加,所以x=2,调用f()

x=10+(2+1)=13(在这里x是局部变量,用f里面的x,i同理)

第二轮

i(mian()里面的i)=2<4

main()中x自加,所以x=3,调用f()

x=10+(3+1)=14(在这里x是局部变量,用f里面的x,i是静态变量,不能赋初始值,所以i是上一轮的结果,是3) 

第三轮

i(mian()里面的i)=3<4

    main()中x自加,所以x=4,调用f()

x=10+(4+1)=15(在这里x是局部变量,用f里面的x,i是静态变量,不能赋初始值,所以i是上一轮的结果,是4)

i(mian()里面的i)=4,

退出循环

x就是刚才的x(mian()中的x)结果

是4

输出

13 14 15 4

第2个回答  2012-12-26
函数里面用的是局部变量x = 10,覆盖了全局变量的使用
static int i=2; //静态全局变量

也就是他是每次运行到函数都会++,并且会保留i的值
x += ++i;
x = x + (++i);
x = 10+ 3; i = 3;
x = 13 而 i = 3;
依次运行可以得出13、14、15
而最后一个输出x,是main函数里面的++x起到了作用
全局变量x加了3次,就等于4
第3个回答  2012-12-26
for循环里的f()输出13,14,15;for后的printf()输出4。