请问C语言高手!!!!

#include"stdio.h"#include"stdlib.h"voidfun(float*p1,float*p2,float*s){s=(float*)callo... #include"stdio.h"
#include"stdlib.h"
void fun(float *p1,float *p2,float *s)
{ s=(float *)calloc(1,sizeof(float));
*s=*p1+*p2++;
}
main()
{ float a[2]={1.1,2.2},b[2]={10.0,20.0},*s=a;
fun(a,b,s);printf("%5.2f\n",*s);
}

为什么输出结果是1.10?
我算的是21.10!谢谢!

printf("%5.2f\n",*s);

”这宽度不是五个嘛?怎么输出的是4?很疑惑,求解释!!!
展开
 我来答
h0292058
2012-09-17 · 超过23用户采纳过TA的回答
知道答主
回答量:60
采纳率:0%
帮助的人:42.4万
展开全部
楼主没有搞清楚值传递的概念,main中的s和 fun中的s只是进行了值传递,也就是把地址传给了fun中的s,但是在fun函数中,s=(float *)calloc(1,sizeof(float)); 使得s指向了新的位置,因此*s=*p1+*p2++; 计算的结果放在了s新指向的位置,而此时main中的s始终指向数组a, 所以这就是为什么printf("%5.2f\n",*s);会将数组a的第一个元素进行输出的原因。
至于你的第二个问题,你如果留意一下的话,会发现输出的时候1.10前面会有一个空格,这是因为5是域宽,就是最少占几个字符的位置,如果输出数据不能填满域宽,则会用空格填充。
d5378295
2012-09-16 · 超过13用户采纳过TA的回答
知道答主
回答量:39
采纳率:0%
帮助的人:39.3万
展开全部
void fun(float *p1,float *p2,float *s)
{ s=(float *)calloc(1,sizeof(float));
*s=*p1+*p2++;
}

这个地方指针s的地址是主函数中指针s的副本, s=(float *)calloc(1,sizeof(float)); s的地址在这个地方有发生了变化,所以对其进行操作,不影响主函数中指针中的内容

至于第二个问题,%5.2 指的是5个有效数字,有2位小数,拟将其改成%5 就是5个了
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
云僧不知处
2012-09-26 · 贡献了超过104个回答
知道答主
回答量:104
采纳率:0%
帮助的人:24.2万
展开全部
同意上面的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式