当前位置: 代码迷 >> C语言 >> [求助]以下程序的输出结果是a=___,b=___,c=___。
  详细解决方案

[求助]以下程序的输出结果是a=___,b=___,c=___。

热度:109   发布时间:2006-03-23 16:09:00.0
然后执行b=func(c,&a); a=9,c=6,b=16,
这一步的a=9,c=6,b=16是怎么得来的?
我怎么是c=6,a=4(因为a=*p=2+2),b=8 ?

----------------解决方案--------------------------------------------------------

#include <stdio.h>
int func(int a,int *p);

void main()
{
int a=1,b=2,c;

c=func(a,&b); printf("a=%d,b=%d,c=%d\n",a,b,c);
b=func(c,&a);printf("a=%d,b=%d,c=%d\n",a,b,c);
a=func(b,&c);printf("a=%d,b=%d,c=%d\n",a,b,c);


}

int func(int a,int *p)
{
a++;
*p=a+2;
return(*p+a);
}
为什么我这样加了红色的语句
运行结果却是:
a=6,b=1,c=4
a=16,b=9,c=16
a=36,b=16,c=19
请高手指点!


----------------解决方案--------------------------------------------------------

因为第一步执行完了后a=2;b=4;c=6;
然后调用b=func(c,&a);时具体如下:
c++==7;
*p=c+2-->*p=9;-->a=9;(*p==*&a==a=9;)
*p+c==16;
友情提示:自己多想想 自己想出来的,理解得最深,记得也最牢!


----------------解决方案--------------------------------------------------------
[QUOTE]阿秀

因为第一步执行完了后a=2;b=4;c=6;
然后调用b=func(c,&a);时具体如下:
c++==7;
*p=c+2-->*p=9;-->a=9;(*p==*&a==a=9;)
*p+c==16;
友情提示:自己多想想 自己想出来的,理解得最深,记得也最牢!

[/QUOTE]
但是第一步运行完了的显示是a=6,b=1,c=4
这个结果简直就是不可理喻  
----------------解决方案--------------------------------------------------------
答案当然是 36 16 19 啦
先执行 c=func(a,&b); 结果为 a=2,b=4,c=6,注意b有个回带过程(&b) ,就是把 *p的值4回带赋给b
后面类似的 b=func(c,&a); 的结果为 a=9,b=16,c=6
a=func(b,&c); 的结果为 a=36,b=16bc=19

----------------解决方案--------------------------------------------------------

终于明白了。原来是那个tc不行,我下了一个C-FREE,正确结果应该是

a=1,b=4,c=6
a=9,b=16,c=6
a=36,b=16,c=19
我说我怎么想不明白了呢


----------------解决方案--------------------------------------------------------
  相关解决方案