
请问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?很疑惑,求解释!!! 展开
#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?很疑惑,求解释!!! 展开
3个回答
展开全部
楼主没有搞清楚值传递的概念,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是域宽,就是最少占几个字符的位置,如果输出数据不能填满域宽,则会用空格填充。
至于你的第二个问题,你如果留意一下的话,会发现输出的时候1.10前面会有一个空格,这是因为5是域宽,就是最少占几个字符的位置,如果输出数据不能填满域宽,则会用空格填充。
展开全部
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个了
{ s=(float *)calloc(1,sizeof(float));
*s=*p1+*p2++;
}
这个地方指针s的地址是主函数中指针s的副本, s=(float *)calloc(1,sizeof(float)); s的地址在这个地方有发生了变化,所以对其进行操作,不影响主函数中指针中的内容
至于第二个问题,%5.2 指的是5个有效数字,有2位小数,拟将其改成%5 就是5个了
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
同意上面的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询