求教一个C语言问题

各位高手看看这个程序的输出结果是多少啊,顺便把过程写下,谢谢了,从书上看的,感觉好象印错了voidsub(floatx,float*y,float*z){*y=*y-1.... 各位高手看看这个程序的输出结果是多少啊,顺便把过程写下,谢谢了, 从书上看的,感觉好象印错了
void sub(float x,float *y,float *z)
{ *y=*y-1.0;
*z=*z+x;
}
main()
{float a=2.5,b=9.0,*pa,*pb;
pa=&a; pb=&b;
sub(b-a,pa,pa);
printf("%f\n",a);
}
我知道结果是8.0000000 可是算不出,谁能解释一下,说明白了我可以加分
展开
 我来答
匿名用户
2009-03-10
展开全部
咱们先看main函数的处理:
pa=&a; //pa指向a的地址,所以*pa的值为2.5
pb=&b; //pb指向b的地址,所以*pb的值为9.0

调用sub(b-a,pa,pa),由于b-a=9.0-2.5=6.5,pa指向a的地址,pb指向b的地址,
所以void sub(float x,float *y,float *z) 中:
x=6.5
float *y: y指向pa指向的地址,也就是y指向a的地址,*y=2.5
float *z: z指向pa指向的地址,也就是z指向a的地址,*z=2.5

再看sub函数中的处理:
*y=*y-1.0=2.5-1.0=1.5 //由于y指向a的地址,所以对于*y的赋值,实际上就是对于a的地址的赋值,也就是对于a进行赋值,所以实际上就是将a赋值为1.5

注意一下:由于y和z都指向a的地址,所以*y被赋值为1.5以后,a的值变为1.5,也就意味着*z也就是1.5了,所以下面的*z应该是带入1.5进行计算

*z=*z+x=1.5+6.5=8.0 //由于z指向a的地址,所以对于*z的赋值,实际上就是对于a的地址的赋值,也就是对于a进行赋值,所以实际上就是将a赋值为8.0

所以,最后a的值为8
百度网友797812a
2009-03-10 · 超过33用户采纳过TA的回答
知道答主
回答量:145
采纳率:0%
帮助的人:0
展开全部
遇到sub(b-a,pa,pa);
b-a=7.5 =x;
*pa=2.5 =*y;
*pa=2.5 =*z;
到sub()里

a=a-1.0
a=1.5;
a=a+x;
a=8
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
奉铭奉涵忍
2020-06-28 · TA获得超过3773个赞
知道大有可为答主
回答量:3080
采纳率:32%
帮助的人:380万
展开全部
这个函数好像只认相对路径,你到你放该程序的目录下,建文件aa.txt
if((p=fopen("aa.txt","r+"))==NULL)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
司徒剑仙
2009-03-10 · TA获得超过234个赞
知道小有建树答主
回答量:275
采纳率:0%
帮助的人:218万
展开全部
结果很简单 8.0
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
无法不偏
2009-03-10 · TA获得超过156个赞
知道答主
回答量:1478
采纳率:0%
帮助的人:0
展开全部
8.0
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式