作业帮 > 综合 > 作业

#include#includevoid fun(float *p1,float *p2,float *s){s=(fl

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/14 09:59:11
#include
#include
void fun(float *p1,float *p2,float *s)
{s=(float *)calloc(1,sizeof(float));
*s=*p1+*p2++;
}
int 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,求解fun到底发生了什么
你认为应该是多少呢?输出是正确的,其值就是a[0],它被初始化为1.1.因为fun中为s指针重新分配了指向,*s=*p1+*p2++;这一句中的s已不再指向a了.因为指针形参本身也是拷贝调用,所以main中的s仍然是指向a的,printf("%5.2f\n",*s);输出自然是a[0].可以这样验证,在fun中的*s=*p1+*p2++;后加一句printf("%5.2f\n",*s);,它就应该输出11.1了……
再问: 就是说fun中的s和main中的s一点关系都没,fun中的s换成任意标识都行?这题fun中的*s是用来混淆视听的?
再答: 是的。fun中的s可以换成其他符号。